代码:
#include <iostream>
using namespace std;
#define ERROR 0
typedef struct BiTNode {
char data;
struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;
int CreateBiTree(BiTree &T) ;
void PreOrderTraverse(BiTree T) ;
void InOrderTraverse(BiTree T) ;
void PostOrderTraverse(BiTree T) ;
int BiTreeDepth(BiTree T);
int main() {
int depth;
BiTree T;
cout << "按先序次序输入字符构造二叉树,输入$表示该位置为空二叉树:\n";
CreateBiTree(T);
cout << "输出该二叉树的先序序列:\n";
PreOrderTraverse(T);
cout << endl;
cout << "输出该二叉树的中序序列:\n";
InOrderTraverse(T);
cout << endl;
cout << "输出该二叉树的后序序列:\n";
PostOrderTraverse(T);
cout << endl;
cout << "输出该二叉树的高度,根结点为第1层,空树为0层:\n";
depth = BiTreeDepth(T);
cout << "树的深度为:" << depth << endl;
return 0;
}
int CreateBiTree(BiTree &T) {
char ch;
cin >> ch;
if (ch == '$')
T = NULL;
else {
T = new BiTNode;
T->data = ch;
CreateBiTree(T->lchild);
CreateBiTree(T->rchild);
}
return 0;
}
void PreOrderTraverse(BiTree T) {
if (T) {
cout << T->data;
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
void InOrderTraverse(BiTree T) {
if (T) {
InOrderTraverse(T->lchild);
cout << T->data;
InOrderTraverse(T->rchild);
}
}
void PostOrderTraverse(BiTree T) {
if (T) {
PostOrderTraverse(T->lchild);
PostOrderTraverse(T->rchild);
cout << T->data;
}
}
int BiTreeDepth(BiTree T) {
int m = 0, n = 0;
if (T == NULL)
return 0;
else {
m = BiTreeDepth(T->lchild);
n = BiTreeDepth(T->rchild);
if (m > n)
return (m + 1);
else
return (n + 1);
}
}
运行: