无栈非递归中序遍历非线索化二叉树
来源:互联网 发布:三维建筑物重建软件 编辑:程序博客网 时间:2024/05/23 23:41
试设计一个非递归算法,按中根顺序遍历非线索二叉树,但不得用任何辅助。
在执行算法期间,允许改变LLINK和RLINK的值。
如何不用辅助栈非递归遍历二叉树呢?
这里给出了一个比较方便的算法,其基本思路是依次将每个结点p左子树的最右结点指向p,
不停回溯,用类似右线索化的方式中序遍历二叉树。
具体算法如下所示:
1. 若p有左儿子: 将其左儿子的最右结点(可为左儿子本身)指向p,然后p=p->lchild;
若p无左儿子或p已经被访问: p向上回溯(即p=p->rchild),访问p;并恢复回溯所用指针;
2.重复上述操作直至二叉树访问完毕。
实现方式如下图:
1.从结点P开始算法 2.P有左儿子,将P左子树最右结点指向P
3.P=P->lchild,P仍有左儿子,同上图操作 4.P=P->lchild,P仍有左儿子,同上图
5.P=P->lchild,P无左儿子,访问元素6 6. P左儿子右指针指向P,说明元素6已
P=P->rchild 访问,则释放元素6指向4的指针,并访问4
7. P左儿子右指针指向P,说明元素4已访问, 8.P有右儿子,故P=P->rchild,访问元素5
则释放元素4指向2的指针,并访问元素2
9.P无左儿子,故P=P->rchild,访问元素1 10.P=P->rchild,访问元素3
释放元素5指向元素1的指针
11.访问完毕
具体代码:
#include <stdio.h>#include <stdlib.h>typedef struct BinaryTree{int data;struct BinaryTree* lchild ;struct BinaryTree* rchild ;}BT;BT* create(int d,BT*l,BT*r);void traverse(BT *p);int main(){ BT*t6=create(6,NULL,NULL); BT*t5=create(5,NULL,NULL); BT*t4=create(4,t6,NULL); BT*t3=create(3,NULL,NULL); BT*t2=create(2,t4,t5); BT*t1=create(1,t2,t3); traverse(t1); return 0;} BT* create(int d,BT*l,BT*r){ BT*p=(BT *)malloc(sizeof(BT)); if(!p) {printf("No enough money to allocate!\n");return NULL;} p->data=d; p->lchild=l; p->rchild=r; return p;}void traverse(BT *p){while(p){BT *pleft=p->lchild;if(pleft){while(pleft->rchild && pleft->rchild!=p)pleft=pleft->rchild;if(!pleft->rchild){pleft->rchild=p;p=p->lchild;continue;}elsepleft->rchild=NULL;}printf("%d ",p->data);p=p->rchild;}printf("\n");}
1 0
- 无栈非递归中序遍历非线索化二叉树
- 前,中,后序遍历二叉树 (递归 && 非递归的栈 && 非递归非栈的线索二叉树)
- 二叉树遍历--递归--非递归--线索化
- 二叉树遍历--递归--非递归--线索化
- 二叉树的非递归中序遍历(二叉线索存储结构)
- 二叉树线索化后 非递归遍历
- 递归 栈 线索 中序遍历二叉树
- c++模板实现二叉树,线索化,线索化遍历,非递归遍历及一些基本操作
- 【二叉树遍历】中序------非递归
- 非递归中序遍历二叉树
- 中序遍历二叉树 [非递归]
- 非递归中序遍历二叉树
- 非递归中序遍历二叉树
- 中序线索化二叉树以及中序遍历线索化二叉树、倒中序遍历线索化二叉树
- 【数据结构基础】前序、中序、后序线索化二叉树(非递归实现)
- DS基础--先序遍历二叉树(递归、非递归、线索二叉树,C语言描述)
- 中序遍历二叉树(递归 & 非递归)
- 二叉树的中序递归,非递归遍历
- VB 的组件既可以拥有用户界面
- 【This VI】LabVIEW Match 1D String Array.vi
- Java远程连接操作linux服务器,scp获取文件
- Mac 10.10下的sandBox目录
- C语言实现表达式求值,支持+、-、*、/四则运算,并且支持多级括号,自定义了栈的操作。
- 无栈非递归中序遍历非线索化二叉树
- 无人值守安装
- lua教程
- Linux 下挂载硬盘的 方法
- 前端自动化流程
- 嵌入式CGI开发之旅——CGI环境变量
- 用户界面View之DatePicker与TimePicker
- sgu101
- 页面布局基础3