欢迎来到天天文库
浏览记录
ID:1320648
大小:59.50 KB
页数:15页
时间:2017-11-10
《二叉树中所有节点左右字数节点的交换及遍历》由会员上传分享,免费在线阅读,更多相关内容在应用文档-天天文库。
1、二叉树中所有节点的左右子树相互交换 递归与非递归程序(2006-10-1111:24:09)转载分类:数据结构//将二叉树中所有节点的左右子树相互交换BiNode*Exchange(BiNode*T){ BiNode*p; if(NULL==T
2、
3、(NULL==T->lchild&&NULL==T->rchild)) returnT; p=T->lchild; T->lchild=T->rchild; T->rchild=p; if(T->lchild) { T->lchild=Exchange(T->lchild); } if(T->rchild) { T->rchild=Exch
4、ange(T->rchild); } returnT;}//将二叉树中所有节点的左右子树相互交换//不使用递归voidNonRecursive_Exchange(BiNode*T){ Stacks; BiNode*p; if(NULL==T) return; InitStack(&s); Push(&s,T); while(!isEmpty(&s)) { T=Pop(&s); p=T->lchild; T->lchild=T->rchild; T->rchild=p; if(T->rchild) Push(&s,T->rchild); if(T->lchild) P
5、ush(&s,T->lchild); } DestroyStack(&s); }//递推形式的前续遍历,不使用递归和堆栈,//但每个节点增加了一个parent指针和Mark标记voidIteration_Mark_PreOrderTraverse(BiPMNode*T){ if(NULL==T) return; while(NULL!=T) { if(0==T->mark) { T->mark++; printf("%d",T->data); while(NULL!=T->lchild) { T=T->lchild; T->mark++;
6、 printf("%d",T->data); } T->mark++; if(NULL!=T->rchild) T=T->rchild; continue; } if(1==T->mark) { T->mark++; if(NULL!=T->rchild) T=T->rchild; continue; } if(2==T->mark) { T=T->parent; } }}//递推形式的中续遍历,不使用递归和堆栈,//但每个节点增加了一个parent指针和Mark标记voidIteration_Mark_
7、InOrderTraverse(BiPMNode*T){ if(NULL==T) return; while(NULL!=T) { if(0==T->mark) { T->mark++; while(NULL!=T->lchild) { T=T->lchild; T->mark++; } printf("%d",T->data); T->mark++; if(NULL!=T->rchild) T=T->rchild; continue; } if(1==T->mark) { printf("%d
8、",T->data); T->mark++; if(NULL!=T->rchild) T=T->rchild; continue; } if(2==T->mark) { T=T->parent; } }} //递推形式的后续遍历,不使用递归和堆栈,//但每个节点增加了一个parent指针和Mark标记voidIteration_Mark_PostOrderTraverse(BiPMNode*T){ if(NULL==T) return; while(NULL!=T) { if(0==T->mark) { T->mark++;
9、 while(NULL!=T->lchild) { T=T->lchild; T->mark++; } T->mark++; if(NULL!=T->rchild) T=T->rchild; continue; } if(1==T->mark) { T->mark++; if(NULL!=T->rchild) T=T->rchild; co
此文档下载收益归作者所有