二叉链表
#define _CRT_SECURE_NO_WARNINGS
#include "iostream"
#include "stdlib.h"
#include "windows.h"
#include "iomanip"
using namespace std;
const int OK = 1;
const int M = 100;
typedef int ElemType;
typedef char TElemType;
typedef struct BitNoDe{
TElemType data;
struct BitNoDe *lchild,*rchild;
}BitNode, *BitTree;
ElemType InitBitTree(BitTree &T);
ElemType CreateBitTree(BitTree &T);
void TraverseBitTree(BitTree T);
ElemType Copy(BitTree T, BitTree &newT);
ElemType Depth(BitTree T);
void M_TraverseBitTree(BitTree T);
void B_TraverseBitTree(BitTree T);
ElemType CountNodes(BitTree T);
ElemType Operate(BitTree T);
void f() {//ABD##E#F##CG###
BitTree T;
InitBitTree(T);
cout << "建立二叉表:" << endl;
CreateBitTree(T);
cout << "先序遍历二叉表:" << endl;
TraverseBitTree(T);
cout << endl;
cout << "中序遍历二叉表:" << endl;
M_TraverseBitTree(T);
cout << endl;
cout << "后序遍历二叉表:" << endl;
B_TraverseBitTree(T);
cout << endl;
cout << "结点数为:" << endl << CountNodes(T);
cout << endl;
cout << "深度为:" << endl << Depth(T) << endl;
system("pause");
}
ElemType main() {
f();
return OK;
}
ElemType InitBitTree(BitTree &T) {
T = NULL;
return OK;
}
ElemType CreateBitTree(BitTree &T)
{//按先序次序输入二叉树中结点的值(一个字符),创建二叉表表示的二叉树T
TElemType ch;
cin >> ch;
if (ch == '#')
T = NULL;
else {
T = new BitNode;
T->data = ch;
CreateBitTree(T->lchild);
CreateBitTree(T->rchild);
}
return OK;
}
void TraverseBitTree(BitTree T)
{//先序遍历二叉树T的算法
if (T) {
cout << T->data;
TraverseBitTree(T->lchild);
TraverseBitTree(T->rchild );
}
}
void M_TraverseBitTree(BitTree T)
{//中序遍历二叉树T的算法
if (T) {
TraverseBitTree(T->lchild);
cout << T->data;
TraverseBitTree(T->rchild);
}
}
void B_TraverseBitTree(BitTree T)
{//后序遍历二叉树T的算法
if (T) {
TraverseBitTree(T->lchild);
TraverseBitTree(T->rchild);
cout << T->data;
}
}
ElemType CountNodes(BitTree T)
{
if (!T)
return ERROR;
else {
int m = CountNodes(T->lchild);
int n = CountNodes(T->rchild);
return m + n + 1;
}
}
ElemType Operate(BitTree T)
{
return ElemType();
}
ElemType Copy(BitTree T,BitTree &newT)
{
if (T == NULL) {
newT = NULL;
return ERROR;
}
else {
newT = new BitNode;
newT->data = T->data;
Copy(T->lchild, newT->lchild );
Copy(T->rchild , newT->rchild );
}
}
ElemType Depth(BitTree T)
{
if (T == NULL)
return ERROR;
else {
int m = Depth(T->lchild);
int n = Depth(T->rchild );
return m>n?m+1:n + 1;
}
}