二叉树的创建与遍历

来源:互联网 发布:知乎 北京 皮肤科 编辑:程序博客网 时间:2024/05/17 19:20

用二叉链表存储二叉树,利用二叉树先序遍历结果递归的方法创建二叉树,对二叉树进行先序遍历,中序遍历,后序遍历。

序列:1 2 0 4 0 0 3 5 0 0 0 

#include<iostream>#include<malloc.h>#define TRUE 1#define FALSE 0#define ok 1#define maxsize 100using namespace std;//typedef int status;//typedef int elemtype;typedef struct binode{int data;struct binode *lchild,*rchild;}binode,*bitree;int treecreated=FALSE;int creatbitree(bitree *T);int preordertraverse(bitree T);int inordertraverse(bitree T);int postordertraverse(bitree T);void main(){int choice=0;int leave=FALSE,flag;binode *BT;cout<<"================)二叉树演示程序=============="<<endl;do{cout<<"1.创建一个二叉树,按线序遍历结果输入,空用0表示"<<endl;cout<<"2.先序遍历二叉树,递归方式遍历二叉树"<<endl;cout<<"3.中序遍历二叉树,递归方式遍历二叉树"<<endl;cout<<"4.后序遍历二叉树,递归方式遍历二叉树"<<endl;cout<<"0.quit"<<endl;cout<<"----input your selection:"<<endl;cin>>choice;switch(choice){case 1:if(treecreated){cout<<"sorry,the tree has been already created!"<<endl;break;}cout<<"please put in number!"<<endl;flag=creatbitree(&BT);if(flag=ok){cout<<"ok,now a tree named BT is created.."<<endl;treecreated=TRUE;}break;case 2:if(!treecreated){cout<<"sorry,you need creat a tree for futher steps!"<<endl;break;}cout<<"pre order";preordertraverse(BT);cout<<endl;break;case 3:if(!treecreated){cout<<"sorry,you need creat a tree for futher steps!"<<endl;break;}cout<<"int order";inordertraverse(BT);cout<<endl;break;case 4:if(!treecreated){cout<<"sorry,you need creat a tree for futher steps!"<<endl;break;}cout<<"post order";postordertraverse(BT);cout<<endl;break;case 0:leave=TRUE;break;}}while(!leave);cout<<"thanks for using ,bye~"<<endl;}int creatbitree(bitree *T)//递归方法实现创建二叉树{int ch=0;cin>>ch;if(ch==0)(*T)=NULL;else{(*T)=(bitree)malloc(sizeof(binode));(*T)->data=ch;creatbitree(&(*T)->lchild);creatbitree(&(*T)->rchild);}return ok;}int preordertraverse(bitree T)//递归方法实现遍历{if(T){cout<<T->data<<"   ";preordertraverse(T->lchild);preordertraverse(T->rchild);return ok;}elsereturn FALSE;}int inordertraverse(bitree T)//递归实现中序遍历{if(T!=NULL){inordertraverse(T->lchild);cout<<T->data<<"   ";inordertraverse(T->rchild);return ok;}elsereturn FALSE;}int postordertraverse(bitree T){if(T){postordertraverse(T->lchild);postordertraverse(T->rchild);cout<<T->data<<"   ";return ok;}elsereturn FALSE;}



原创粉丝点击