中根非递归遍历二叉树
2016-01-20 12:13
288 查看
在先根非递归中,根入栈后弹出,访问,右孩子与左孩子进栈,顺序很清楚。但是中根非递归与后根非递归中,根入栈后如果弹出不能访问,这是一个困惑的地方。
为了更明晰地,更统一3种非递归设计思路。均可以采用入栈,弹出,左右子树入栈这种基本步骤。每个步骤需要仔细在纸上演示设计。
由于一个节点出栈后还要进栈,该节点再次位于栈顶时,由于出过栈,再次出栈的时候就直接访问,而不要重复检查他的左右子树了。所以,每个节点还有一个标志位:isPulled.如果为true,则说明该节点出过栈。
经过一些例子演示。设计一种中根非递归的解决步骤:
根r入栈s
while(s不空)
{
栈顶head
if(head.isPulled == true)//head是出过栈
head出栈,访问head
else//head没有出过栈
{
head出栈,head.isPulled=ture
//因为中根,根在中间,那么就再次将右子树,根,左子树的顺序入栈。这样在弹出的时候就是左根右的顺序
//首先判断head左右子树是否全null,如果全null,那么访问head
if(head.left==null && head.right==null)
访问head
if(head.right!=null)//右孩子不空进栈
s.enStack(head.right)
if(head.left!=null || head.right!=null)//有孩子,则就重进栈
s.enStack(head)
if(head.left!=null)//左孩子不空进栈
s.enStack(head.left)
}
}
以上步骤的设计,完全是逐步求精、逐步完善的,先主后次,得到的结果。从手工图纸的步骤中得到一般的规律,主要规律,并用代码表示。
代码最后的结果顺序,体现了一种从上到下,精准的逻辑。但是这种准确的逻辑,依靠人脑是不可能从一开始严丝合缝的写下了。这样,最初的设计就体现的非常关键了。
代码中的条件判断,属于次要步骤,在设计好主要步骤后,后加进去进行完善。
例子中,一颗如下所示的二叉树,进行中根非递归遍历的思路:
为了更明晰地,更统一3种非递归设计思路。均可以采用入栈,弹出,左右子树入栈这种基本步骤。每个步骤需要仔细在纸上演示设计。
由于一个节点出栈后还要进栈,该节点再次位于栈顶时,由于出过栈,再次出栈的时候就直接访问,而不要重复检查他的左右子树了。所以,每个节点还有一个标志位:isPulled.如果为true,则说明该节点出过栈。
经过一些例子演示。设计一种中根非递归的解决步骤:
根r入栈s
while(s不空)
{
栈顶head
if(head.isPulled == true)//head是出过栈
head出栈,访问head
else//head没有出过栈
{
head出栈,head.isPulled=ture
//因为中根,根在中间,那么就再次将右子树,根,左子树的顺序入栈。这样在弹出的时候就是左根右的顺序
//首先判断head左右子树是否全null,如果全null,那么访问head
if(head.left==null && head.right==null)
访问head
if(head.right!=null)//右孩子不空进栈
s.enStack(head.right)
if(head.left!=null || head.right!=null)//有孩子,则就重进栈
s.enStack(head)
if(head.left!=null)//左孩子不空进栈
s.enStack(head.left)
}
}
以上步骤的设计,完全是逐步求精、逐步完善的,先主后次,得到的结果。从手工图纸的步骤中得到一般的规律,主要规律,并用代码表示。
代码最后的结果顺序,体现了一种从上到下,精准的逻辑。但是这种准确的逻辑,依靠人脑是不可能从一开始严丝合缝的写下了。这样,最初的设计就体现的非常关键了。
代码中的条件判断,属于次要步骤,在设计好主要步骤后,后加进去进行完善。
例子中,一颗如下所示的二叉树,进行中根非递归遍历的思路:
相关文章推荐
- js中event.keyCode用法及keyCode对照表
- HashMap, HashSet, HashMap Iterator
- 目标检测之rcnn---开启检测新高度优于dpm
- 【解惑】选择做程序员是对还是错
- Mysql开启慢查询
- 天声人語 20160120 あきれた廃棄カツ横流し
- 【Ubuntu】升到14,攻克了进入用户后没有菜单条导航栏的问题
- javascript 数组 排除null, undefined, 和不存在的元素
- 基本排序算法
- 节点类
- ant发送邮件
- Word2010插入页码分节符
- 【转】Python实现修改Windows CMD命令行输出颜色(完全解析)
- 目标检测之dpm---hog的最优升级版
- AndroidStudio 编译C/C++文件生成SO文件
- Win10下CH340安装
- OncePerRequestFilter
- Failed to retrieve data for this request. (Microsoft.SqlServer.Management.Sdk.Sfc)
- 兼容利器之X-UA-Compatible
- interceptor