一切都在代码里:
#include <iostream>
using namespace std;
typedef char Item;
typedef struct BTNode
{
Item data;
BTNode * lChild;
BTNode * rChild;
}BTNode,*BTree;
void InitBTree(BTree *T);
void CreateBTree(BTree *T);
void DestroyBTree(BTree *T);
void PreOrderTraverse(BTree T);
void InOrderTraverse(BTree T);
void PostOrderTraverse(BTree T);
void Copy(Item *dest,Item *src);
void Copy(Item *dest,Item *src)
{
*dest = *src;
}
void InitBTree(BTree *T)
{
*T = NULL;
}
void CreateBTree(BTree *T)
{
Item item;
cin>>item;
if(item=='#')
{
*T = NULL;
}
else {
*T = new BTNode;
Copy(&((*T)->data),&item);
CreateBTree(&((*T)->lChild));
CreateBTree(&((*T)->rChild));
}
}
void DestroyBTree(BTree *T)
{
if(*T)
{
DestroyBTree(&((*T)->lChild));
DestroyBTree(&((*T)->rChild));
delete (*T);
*T = NULL;
}
}
void PreOrderTraverse(BTree T)
{
if(T)
{
cout<<"node :"<<T->data<<endl;
PreOrderTraverse(T->lChild);
PreOrderTraverse(T->rChild);
}
}
void InOrderTraverse(BTree T)
{
if(T)
{
InOrderTraverse(T->lChild);
cout<<"node :"<<T->data<<endl;
InOrderTraverse(T->rChild);
}
}
void PostOrderTraverse(BTree T)
{
if(T)
{
PostOrderTraverse(T->lChild);
PostOrderTraverse(T->rChild);
cout<<"node :"<<T->data<<endl;
}
}
int main()
{
BTree tree;
InitBTree(&tree);
CreateBTree(&tree);
cout<<"Pre Order:"<<endl;
PreOrderTraverse(tree);
cout<<"In Order:"<<endl;
InOrderTraverse(tree);
cout<<"Post Order:"<<endl;
PostOrderTraverse(tree);
DestroyBTree(&tree);
getchar();
}
输入:
ABD##E##CF###
输出:
Pre Order:
node :A
node :B
node :D
node :E
node :C
node :F
In Order:
node :D
node :B
node :E
node :A
node :F
node :C
Post Order:
node :D
node :E
node :B
node :F
node :C
node :A