您的位置:首页 > 其它

二叉树的创建与前序中序后序遍历的递归实现

2014-06-27 00:21 411 查看
一切都在代码里:

#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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐