资源描述:
《c语言二叉树建立、遍历、交换子树代码》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、C语言二叉树建立,遍历(递归与非递归),交换子树(代码)//C版二叉树建立,遍历(递归与非递归),交换子树#include#include#includeusingnamespacestd;//建树typedefstructNode{ intdata; Node*lchild,*rchild;}btree;btree*create(inta[],intn,inti){ btree*t; if(i>n) t=NULL; else { t=newbtree; t->data=a[i-1]
2、; t->lchild=create(a,n,2*i); t->rchild=create(a,n,2*i+1); } returnt;}//前序遍历(递归)voidpreorder(btree*p){ if(p!=NULL) { cout<data<lchild); preorder(p->rchild); }}//前序遍历(非递归)voidpreorder1(btree*p){ stacks; while(!s.empty()
3、
4、p!=NULL) { wh
5、ile(p!=NULL) { cout<data<lchild; } p=s.top(); s.pop(); p=p->rchild; }}//中序遍历(递归)voidinorder(btree*p){ if(p!=NULL) { inorder(p->lchild); cout<data<rchild); }}//中序遍历(非递归)voidinorder1(btree*p){
6、 stacks; while(!s.empty()
7、
8、p!=NULL) { while(p!=NULL) { s.push(p); p=p->lchild; } p=s.top(); cout<data<rchild; }}//后序遍历(递归)voidpostorder(btree*p){ if(p!=NULL) { postorder(p->lchild); postorder(p->rchild); cout
9、<data<s; nodepost; while(!s.empty()
10、
11、p!=NULL) { while(p!=NULL) { post.t=p; post.flag=0; s.push(post); p=p->lchild; } if(!s.empty()) { post=s.top(); s.pop()
12、; if(post.flag==0) { post.flag=1; s.push(post); p=(post.t)->rchild; } else { cout<<(post.t)->data<q; btree*t; if(p!=NULL) q.push(p); while(!q.empty()) { t=q
13、.front(); cout<data<lchild!=NULL) q.push(t->lchild); if(t->rchild!=NULL) q.push(t->rchild); }}//对二叉树t中所有结点的左右子树进行交换voidexchange(btree*p){ btree*t; if(p!=NULL) { t=p->lchild; p->lchild=p->rchild; p->rchild=t; exchange(p->lch
14、ild); exchange(p->rchild); }}voidmain(){ btree*root; inta[5]={1,2,3,4,5}; root=create(a,5,1); cout<<