您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 质量控制/管理 > 二叉树遍历源代码(通过vc6.0编译)
#includeiostream.h#includestdlib.h#includestdio.h#includestackusingnamespacestd;#defineNULL0#defineOK1#defineOVERFLOW-1typedefintStatus;typedefstructnode{chardata;structnode*lchild;structnode*rchild;}*bitree;intk=0;intdepth(bitreeT)//树的高度{if(!T)return0;else{intm=depth(T-lchild);intn=depth(T-rchild);return(mn?m:n)+1;}}//先序,中序建树structnode*create(char*pre,char*ord,intn){structnode*T;intm;T=NULL;if(n=0){returnNULL;}else{m=0;T=new(structnode);T-data=*pre;T-lchild=T-rchild=NULL;while(ord[m]!=*pre)m++;T-lchild=create(pre+1,ord,m);T-rchild=create(pre+m+1,ord+m+1,n-m-1);returnT;}}//中序递归遍历voidinorder(structnode*T){if(!T)return;else{inorder(T-lchild);coutT-data;inorder(T-rchild);}}voidinpre(structnode*T){if(!T)return;else{coutT-data;inpre(T-lchild);inpre(T-rchild);}}voidpostorder(structnode*T){if(!T)return;else{postorder(T-lchild);postorder(T-rchild);coutT-data;}}//先序非递归遍历voidinpre1(structnode*T){structnode*p;structnode*stack[20];inttop=0;p=T;cout非递归先序为:endl;while(p||top!=0){while(p){stack[top++]=p;coutp-data;p=p-lchild;}p=stack[--top];p=p-rchild;}}//中序非递归遍历voidinorder1(structnode*T){structnode*p;structnode*stack[20];inttop=0;p=T;cout非递归中序为:endl;while(p||top!=0){while(p){stack[top++]=p;p=p-lchild;}p=stack[--top];coutp-data;p=p-rchild;}}//主函数intmain(){bitreeT;charpre[30],ord[30];intn,m;cout请输入先序为-+a*b%cd/ef的二叉树:endl;gets(pre);cout请输入中序为a+b*c%d-e/f的二叉树:endl;gets(ord);n=strlen(pre);T=create(pre,ord,n);cout后序遍历为:endl;postorder(T);coutendl;inpre1(T);coutendl;inorder1(T);coutendl;m=depth(T);cout二叉树高度为:mendl;return0;}
本文标题:二叉树遍历源代码(通过vc6.0编译)
链接地址:https://www.777doc.com/doc-6346460 .html