树的先序遍历递归的理解
直接看算法:
void PreOrder(BiTree root)
{if(root){visit(root);PreOrder(root->left);PreOrder(root->right);}
}
递归的实现就是这样简洁。
一步一步来分析。
首先,树如果非空,那么访问根结点。接着进入左子树,还记得我们在前面的文章中对递归的保存做过一个跟踪:保存的当前进入递归后的下一条指令的地址。
这里进入左子树后,要保存进入右子树指令的地址:PreOrder(root->right)这条指令的地址被保存。
左子树不空,则访问左子树的根结点,继续进入左子树的左子树,同时保存左子树的右子树的访问入口。如此进行下去,直到最左子树是个叶子结点了,那么它的左右子树都将是空,因此这个函数将走到尽头,注意这个梦境已经深入多层,现在是往回走的时候。
这里的往回走值得仔细考虑一下。
最左的这个子树访问完毕退出后,就可以把它从想象的图画中删掉了,好像从没出现过一样。这样就不必总是记挂着退回的时候这些已经访问过的结点该怎么办。
可以如此想象:回退时,前面已经访问过的结点,或者一种深入的梦境在崩塌。
回退一个少一个。在回退到整棵树的根结点时,左子树已经没了,这样只用把注意力放到右子树即可。这是较为宏观一些的看法。缩小规模一样这么用。
以上。
树的先序遍历递归的理解相关推荐
- XDOJ 363 输出快速排序递归算法隐含递归树的后序遍历序列 AC
像我这样的菜鸡也没有什么能输出的,好像我写题解也不算输出. 最近期末了,写数据结构实验的时候,这个题写了挺久的,搞出来记录一下. 输出快速排序递归算法隐含递归树的后序遍历序列 描述: 快速排序递归算法 ...
- 树的先序遍历,中序遍历,后续遍历(递归和非递归实现)
前序遍历是先访问根节点再访问左子树最后访问右子树(中,左,右):中序遍历是先访问左子树再访问根节点最后访问右子树(左,中,右):后序遍历是先访问左子树再访问右子树最后访问根节点(左,右,中).---- ...
- 程序员面试题精选100题(06)-二元查找树的后序遍历结果[数据结构]
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8 ...
- 怎样将树的中序遍历的数输入到一个数组中_数据结构与算法-二叉查找树平衡(DSW)...
上一节探讨了二叉查找树的基本操作,二叉查找树的查找效率在理想状态下是O(lgn),使用该树进行查找总是比链表快得多.但是,该论点并不总是正确,因为查找效率和二叉树的形状息息相关.就像这样: 图1-1给 ...
- 6.二元查找树的后序遍历结果[PostOrderOfBST]
[题目] 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8 ...
- 判断整数序列是不是二元查找树的后序遍历结果
题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果. 如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8 ...
- 为什么普通树没有中序遍历和森林没有后序遍历
本文为个人理解,若有错误欢迎指正! 这里说的树当然是指普通的树,而不是树中比较特别的二叉树. 1.为什么普通树没有中序遍历 中序遍历是对于二叉树而言: 中序遍历左子树,访问根结点,中序遍历右结点. 在 ...
- leetCode 1110 删点成林(树,后序遍历)
题目链接:点击查看 题目描述: 给定一个整数二叉树和一些整数,求删掉这些整数对应的节点后,剩余的子树. 输入输出: 输入:root = [1,2,3,4,5,6,7], to_delete = [3, ...
- 二叉树的前序遍历、中序遍历、后序遍历(递归+非递归实现)
目录 前序遍历 递归实现 非递归实现 中序遍历 递归实现 递归实现 后序遍历 递归实现 非递归实现 二叉树是一种非常经典的数据结构,它的应用途径十分广泛,但同时它也是一种简单的.易理解的数据结构,解决 ...
最新文章
- SAP MM 采购附加费在收货以及发票过账时候的会计分录
- SAP SD基础知识之自动信用控制
- Ubuntu下添添加的用户没有sudo权限的解决办法
- 大公司or小公司,我该怎么选?
- Android开发:Menu选项菜单
- 深度系统优化工具_HiBit Uninstaller卸载工具【win版】
- js获取内网ip_WebRTC安全问题:私有IP与mDNS
- include指令与include行为
- 二元一次方程编程解鸡兔同笼问题
- 06.第七章、成本管理
- 学写网页 #05# CSS Mastery 笔记 1~3
- 手机照片丢失怎么才能恢复
- word文档中如何让正文分栏但是脚注不分栏
- Oracle 11g RAC 修改服务器各类ip地址【转载】
- Android闪退原因
- Java多线程,Android多线程
- 中国联通和中国电信如合并要抗衡中国移动需要时间
- 全球及中国挤塑聚苯板(XPS板)行业研究及十四五规划分析报告
- 一招教你如何搭建一个秒杀系统
- 智能空调检测程序c语言,基于单片机的智能空调节电控制器毕业设计论文C语言编程.doc...
热门文章
- g2o图优化简介与基本使用方法
- python3画图中文乱码_matplotlib图例中文乱码?
- 计算机缺失esul.dll,msedgeupdateres_es.dll
- C语言电话薄登录系统,求助 哈稀表编电话薄程序(c语言) 算法
- python静态方法怎么调用_python实例方法、静态方法和类方法
- python 使窗口前置
- 多台Linux服务器一起关机,linux – 一台服务器,两台APC UPS上的冗余电源:如何触发关机?...
- ios plist_iOS属性列表(plist)示例
- 开课吧:人工智能技术会如何影响青年就业
- 腾讯九次面试C++,如今面试题了如指掌