二叉树的非递归遍历

 

非递归实现二叉树的前序/后序/中序遍历

中序遍历

        //                 arr[1]//       arr[2]               arr[3] // arr[4]    arr[5]      arr[6]    //       arr[7]  arr[8]

如上数据,

以栈来代替递归实现,输出为4,2,(遍历右元素7,5,8).那么就要想办法以上面的方法入栈4,2,7,5,8的反序8,5,7,2,4

左节点出栈后的下个节点肯定是其父节点,右节点(在没有子节点的情况下)出栈后下个节点肯定是根左节点(如节点4的下个节点是节点2, 节点8的下个节点是节点1)

step 1 遍历左节点,入栈

step 2 出栈,然后遍历该节点的右节点回到step1

以下为demo:

        //                 arr[1]//       arr[2]                // arr[4]    arr[5]         //     arr[7]    arr[8]

push:1,2,4
pop:4
push:7
pop:7
pop:2
push:5
pop:5
push:8
pop:8
pop:1

总结:

  1. 遍历全部左节点
  2. pop一个节点,push右节点
  3. 回到step1

先序遍历

与中序遍历类似,把输出的地方改为Push的位置就可以了,因为先序总是以根节点开始,然后再访问左右节点

后序遍历

  1. push:1,2,4
  2. pop:4  {prev:2,cur=4}
  3. push:5 {prev:4,cur=2}
  4. push:7 {prev:2,cur=5}
  5. pop:7 {prev:5,cur=7}
  6. push:8 {prev:7,cur=5}
  7. pop:8 {prev:5,cur=8}
  8. pop:5 {prev:8,cur=5}
  9. pop:2 {prev:5,cur=2}

后序遍历比较麻烦一些.

按照以下规则来记忆:

  1. 当节点为叶节点时出栈
  2. 左节点出栈后,继续出栈右节点,再出栈自身节点,如果没有右节点则出栈自身节点

使用双栈实现:应该说是最简单的

pop一个节点到一个栈,然后push左右节点到另一个栈

不贴代码,代码下面有

参考此贴:http://www.cnblogs.com/MichaelYin/archive/2010/12/23/1915316.html

http://www.cnblogs.com/Jax/archive/2009/12/28/1633691.html

关于递归算法和非递归算法的区别和转换的文章

http://wenku.baidu.com/view/0c2409c55fbfc77da269b1c8.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/296546.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

InfoQ宣布成立CNUT容器技术俱乐部 欲连接中国容器社区

2015年8月28日,首届CNUTCon全球容器技术大会在北京举行。在大会上,极客邦科技与InfoQ中国创始人兼CEO霍泰稳宣布,InfoQ联合国内一线IT技术公司共同成立CNUT容器技术俱乐部,连接中国容器技术社区,推动容器技术以及开源在…

office 高效办公智慧树_干货高效实用的office办公小技巧之word篇

对于office三剑客ppt、Word、Excel的使用成了日常,作为办公党,今天就拿出自己在平时工作之中发现、学到的小技巧来做个总结,分享给大家。相信很多大神对于这些小技巧都已经精通,所以lz会先列出目录,大家可以自行依据目…

POJ 1904 【强连通分量】.cpp

题意: 很久很久以前.. 有一个国王.. 他有好几个儿子.. 这些王子都喜欢上了邻国的公主.. 他们准备迎娶自己喜欢的公主中的一个.. 国王就让宰相给列一个清单.. 宰相就给了国王一个清单..上面写明了哪个王子将迎娶哪个邻国的公主.. 但是调皮的国王不太满意~~ 他还想知道…

电梯里为什么放镜子?90%的人都不知道

全世界只有3.14 % 的人关注了爆炸吧知识随着高层建筑不断的拔地而起我们每天可能会上下十几层的高楼人们当然不想去爬楼梯所以电梯已成为生活中必不可少的一部分▼我们几乎每天都会坐电梯上班时、回家时、逛街时当我们每走进电梯时第一动作都会干什么呢大概都会先看自己的妆容再…

WPF中的命令(Command)

这节来讲一下WPF中的命令(Command)的使用。【认识Command】我们之前说过,WPF本身就为我们提供了一个基础的MVVM框架,本节要讲的命令就是其中一环,通过在ViewModel中声明命令,从View中使用Binding绑定命令,就能实现从Vi…

PHP中 对象自动调用的方法:__set()、__get()、__tostring()

总结: (1)__get($property_name):获取私有属性$name值时,此对象会自动调用该方法,将属性name值传给参数$property_name,通过这个方法的内部 执行,返回我们传入 的私有属性的值。 &am…

xhprof php性能分析工具

先安装libpng*下载安装xhprofwget http://pecl.php.net/get/xhprof-0.9.2.tgztar zxf xhprof-0.9.2.tgzcd xhprof-0.9.2cp -r xhprof_html xhprof_lib cd extensionphpize./configuremakemake install编辑php.ini[xhprof]extensionxhprof.so;; directory used by default imple…

matlab中给图像加几个矩形框_没想到!PPT中的这个效果,用好了,简直就是渣图美化器...

相信大家一定看到过,透过磨砂玻璃呈现在眼前的景色,是不是有种朦胧美?其实,在PPT中你也可以复刻出这样的效果。例如,这样的PPT页面:把背景虚化掉,更加突出主题。你想知道PPT中的磨砂效果&#x…

【转贴】mysql导入数据load data infile用法

mysql导入数据load data infile用法 基本语法:load data [low_priority] [local] infile file_name txt [replace | ignore]into table tbl_name[fields[terminated byt][OPTIONALLY] enclosed by ][escaped by\ ]][lines terminated byn][ignore number lines][(co…

宝贝,我帮你清了购物车哦!

1 一场意外让本不富裕的女朋友雪上加霜甚至还回复了单身▼2 外甥女去参加舅舅的婚礼发现账本上没有她的名字于是写上自己的名字并随了兜里所有的钱人情世故整的明明白白▼3 我感觉再多吹几首他们就能复合......▼4 在家隔离第N天果然天下沙雕是一家▼5 我猜中了开头但没猜…

Dapr牵手.NET学习笔记:Actor小试

Actor模型是一种避免线程共享数据,相同Actor实体串行化的方案,所以不便dapr的其他功能,几乎都是非编程入侵的,相反,Dapr Acror深度定制的,关于Actor,.net中有一些通用框架,比如Akka.…

认识Linux下的各种系统服务

只要是linux系统、不管什么发行版本,都有以下的系统服务。本文将对这些服务逐一进行说明。推荐花一些时间来了解这些服务的作用,以便清楚的知道自己该使用哪些服务。 NetworkManager, NetworkManagerDispatcherNetworkManager是一个后台服务程序&#xf…

黄聪:wordpress如何开启文章格式post format

发现很多“古老”的WordPress主题使用量非常大,虽然部分也在随着WordPress版本的升级而“升级”,只不过是修复了bug而已,wordpress的新特性并没有使用。而且多数国内的wordpress主题制作者,也都是在这些主题的基础上进行创作&…

11没有源码注释_我们为什么要看源码、应该如何看源码?

看源码的意义看源码只是一种方法、手段,而不是目的。我也曾经给自己制定过“阅读xxx源码”的目标,现在看起来真的很蠢,一点不smart(specific、measurable、attainable、relevant、time-bound)。只有搞清楚了阅读代码的…

如果你没空读书,就一定要来看看这8个公众号!

全世界只有3.14 % 的人关注了爆炸吧知识不管世界变化多块,阅读仍是个不过时的动作。今天就为大家推荐几个优质公众号,从社会热点、读书成长、生活新知,你的碎片化时间,我们包了!一起来看看呀~♥长按二维码,…

03Prism WPF 入门实战 - Region

1.概要源码及PPT地址:https://github.com/JusterZhu/wemail视频地址:https://www.bilibili.com/video/BV1KQ4y1C7tg?sharesourcecopyweb(1)Prism概览Application:我们开发应用程序,初始化Bootstrapper。Bo…

CentOS利用crontab执行计划任务

walker的需求是每天1点钟的时候,执行一个shell脚本,下面记录walker用到的基本功能。1、安装yum install crontabs2、服务相关/sbin/service crond status #查看任务状态 /sbin/service crond start #启动服务 /sbin/service crond stop …

10月Web服务器调查:Apache下降 Ngnix攀升

来自netcraft的消息,在2010年10月份的Web服务器市场调查中,在232,839,963个网站中,仍有69.8%的站点在使用 Apache服务器,相比于上个月,其市场份额增长了大约1个百分点,Ngnix也有较小幅度的增长,…

四元数左乘右乘_四元数、欧拉角学习笔记个人理解

一、背景知识:点乘、叉乘复数的点乘:(aibjck)•(xiyjzk)-(axbycz)复数的叉乘:(aibjck)(xiyjzk)(ax)ii(ay)ij(az)ik(bx)ji(by)jj(bz)jk(cx)ki(cy)kj(cz)kkijk三轴定义如上图所示。满足右手螺旋定则:(这个不是太明白,但是…

Python深度学习029:pytorch中常用的模块或方法

PyTorch是一个广泛使用的深度学习库,提供了许多用于构建和训练神经网络的模块和方法。下面是一些PyTorch中常用的模块和方法的简要介绍: PyTorch常用模块和方法 torch 用途:PyTorch的基础模块,提供了多种数学运算功能。常用方法: torch.tensor():创建张量torch.randn():…