#include <iostream>
using namespace std;
const int MAXSIZE = 100;
typedef char ElemType;
typedef struct BiTNode {
ElemType data;
struct BiTNode* lchild, * rchild;
}BiTNode, * BiTree;
bool PreCreateBiTree(BiTree& T);//先序建立二叉树
bool Preorder(BiTree T);//先序遍历
bool Inorder(BiTree T);//中序遍历
bool Postorder(BiTree T);//后序遍历
int BiTreeDepth(BiTree T);//返回二叉树的深度
bool CopyTree(BiTree S, BiTree& T);//将二叉树S复制为二叉树T
bool PreCreateBiTree(BiTree& T) {
char ch;
cin >> ch;
if (ch == '#')T = NULL;
else {
T = new BiTNode;
if (!T)return 0;
T->data = ch;
PreCreateBiTree(T->lchild);
PreCreateBiTree(T->rchild);
}
return 1;
}
bool Preorder(BiTree T) {
if (T) {
cout << T->data << " ";
Preorder(T->lchild);
Preorder(T->rchild);
return 1;
}
return 0;
}
bool Inorder(BiTree T) {
if (T) {
Inorder(T->lchild);
cout << T->data << " ";
Inorder(T->rchild);
return 1;
}
return 0;
}
bool Postorder(BiTree T) {
if (T) {
Postorder(T->lchild);
Postorder(T->rchild);
cout << T->data << " ";
return 1;
}
return 0;
}
int BiTreeDepth(BiTree T) {
if (!T)return 0;
int hL = BiTreeDepth(T->lchild);
int hR = BiTreeDepth(T->rchild);
if (hL >= hR)return hL + 1;
return hR + 1;
}
bool CopyTree(BiTree S, BiTree& T) {
if (!S) T = NULL;
else {
BiTree lptr, rptr;
CopyTree(S->lchild, lptr);
CopyTree(S->rchild, rptr);
T = new BiTNode;
if (!T)return 0;
T->data = S->data;
T->lchild = NULL; T->rchild = NULL;
}
return 1;
}
int main()
{
BiTree T, T1;
cout << "先序建立一个二叉树,输入先序序列,空用#代替:\n";
PreCreateBiTree(T);//先序建立二叉树;
cout << "先序遍历:";
Preorder(T);//先序遍历
cout << endl;
cout << "中序遍历:";
Inorder(T);//中序遍历
cout << endl;
cout << "后序遍历:";
Postorder(T);//后序遍历
cout << endl;
cout << "二叉树深度为:" << BiTreeDepth(T) << endl;
CopyTree(T, T1);
cout << "复制二叉树,先序遍历:";
Preorder(T);//先序遍历
cout << endl;
return 0;
}
实验样例