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

来源:互联网 发布:ubuntu在线音乐软件 编辑:程序博客网 时间:2024/05/16 12:54

一切都在代码里:

#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 :Anode :Bnode :Dnode :Enode :Cnode :FIn Order:node :Dnode :Bnode :Enode :Anode :Fnode :CPost Order:node :Dnode :Enode :Bnode :Fnode :Cnode :A



0 0
原创粉丝点击