直接看算法:

void PreOrder(BiTree root)
{if(root){visit(root);PreOrder(root->left);PreOrder(root->right);}
}

递归的实现就是这样简洁。
一步一步来分析。
首先,树如果非空,那么访问根结点。接着进入左子树,还记得我们在前面的文章中对递归的保存做过一个跟踪:保存的当前进入递归后的下一条指令的地址。
这里进入左子树后,要保存进入右子树指令的地址:PreOrder(root->right)这条指令的地址被保存。
左子树不空,则访问左子树的根结点,继续进入左子树的左子树,同时保存左子树的右子树的访问入口。如此进行下去,直到最左子树是个叶子结点了,那么它的左右子树都将是空,因此这个函数将走到尽头,注意这个梦境已经深入多层,现在是往回走的时候。
这里的往回走值得仔细考虑一下。

最左的这个子树访问完毕退出后,就可以把它从想象的图画中删掉了,好像从没出现过一样。这样就不必总是记挂着退回的时候这些已经访问过的结点该怎么办。

可以如此想象:回退时,前面已经访问过的结点,或者一种深入的梦境在崩塌。

回退一个少一个。在回退到整棵树的根结点时,左子树已经没了,这样只用把注意力放到右子树即可。这是较为宏观一些的看法。缩小规模一样这么用。

以上。

树的先序遍历递归的理解相关推荐

  1. XDOJ 363 输出快速排序递归算法隐含递归树的后序遍历序列 AC

    像我这样的菜鸡也没有什么能输出的,好像我写题解也不算输出. 最近期末了,写数据结构实验的时候,这个题写了挺久的,搞出来记录一下. 输出快速排序递归算法隐含递归树的后序遍历序列 描述: 快速排序递归算法 ...

  2. 树的先序遍历,中序遍历,后续遍历(递归和非递归实现)

    前序遍历是先访问根节点再访问左子树最后访问右子树(中,左,右):中序遍历是先访问左子树再访问根节点最后访问右子树(左,中,右):后序遍历是先访问左子树再访问右子树最后访问根节点(左,右,中).---- ...

  3. 程序员面试题精选100题(06)-二元查找树的后序遍历结果[数据结构]

    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8   ...

  4. 怎样将树的中序遍历的数输入到一个数组中_数据结构与算法-二叉查找树平衡(DSW)...

    上一节探讨了二叉查找树的基本操作,二叉查找树的查找效率在理想状态下是O(lgn),使用该树进行查找总是比链表快得多.但是,该论点并不总是正确,因为查找效率和二叉树的形状息息相关.就像这样: 图1-1给 ...

  5. 6.二元查找树的后序遍历结果[PostOrderOfBST]

    [题目] 输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果.如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8 ...

  6. 判断整数序列是不是二元查找树的后序遍历结果

    题目:输入一个整数数组,判断该数组是不是某二元查找树的后序遍历的结果. 如果是返回true,否则返回false. 例如输入5.7.6.9.11.10.8,由于这一整数序列是如下树的后序遍历结果: 8 ...

  7. 为什么普通树没有中序遍历和森林没有后序遍历

    本文为个人理解,若有错误欢迎指正! 这里说的树当然是指普通的树,而不是树中比较特别的二叉树. 1.为什么普通树没有中序遍历 中序遍历是对于二叉树而言: 中序遍历左子树,访问根结点,中序遍历右结点. 在 ...

  8. leetCode 1110 删点成林(树,后序遍历)

    题目链接:点击查看 题目描述: 给定一个整数二叉树和一些整数,求删掉这些整数对应的节点后,剩余的子树. 输入输出: 输入:root = [1,2,3,4,5,6,7], to_delete = [3, ...

  9. 二叉树的前序遍历、中序遍历、后序遍历(递归+非递归实现)

    目录 前序遍历 递归实现 非递归实现 中序遍历 递归实现 递归实现 后序遍历 递归实现 非递归实现 二叉树是一种非常经典的数据结构,它的应用途径十分广泛,但同时它也是一种简单的.易理解的数据结构,解决 ...

最新文章

  1. SAP MM 采购附加费在收货以及发票过账时候的会计分录
  2. SAP SD基础知识之自动信用控制
  3. Ubuntu下添添加的用户没有sudo权限的解决办法
  4. 大公司or小公司,我该怎么选?
  5. Android开发:Menu选项菜单
  6. 深度系统优化工具_HiBit Uninstaller卸载工具【win版】
  7. js获取内网ip_WebRTC安全问题:私有IP与mDNS
  8. include指令与include行为
  9. 二元一次方程编程解鸡兔同笼问题
  10. 06.第七章、成本管理
  11. 学写网页 #05# CSS Mastery 笔记 1~3
  12. 手机照片丢失怎么才能恢复
  13. word文档中如何让正文分栏但是脚注不分栏
  14. Oracle 11g RAC 修改服务器各类ip地址【转载】
  15. Android闪退原因
  16. Java多线程,Android多线程
  17. 中国联通和中国电信如合并要抗衡中国移动需要时间
  18. 全球及中国挤塑聚苯板(XPS板)行业研究及十四五规划分析报告
  19. 一招教你如何搭建一个秒杀系统
  20. 智能空调检测程序c语言,基于单片机的智能空调节电控制器毕业设计论文C语言编程.doc...

热门文章

  1. g2o图优化简介与基本使用方法
  2. python3画图中文乱码_matplotlib图例中文乱码?
  3. 计算机缺失esul.dll,msedgeupdateres_es.dll
  4. C语言电话薄登录系统,求助 哈稀表编电话薄程序(c语言) 算法
  5. python静态方法怎么调用_python实例方法、静态方法和类方法
  6. python 使窗口前置
  7. 多台Linux服务器一起关机,linux – 一台服务器,两台APC UPS上的冗余电源:如何触发关机?...
  8. ios plist_iOS属性列表(plist)示例
  9. 开课吧:人工智能技术会如何影响青年就业
  10. 腾讯九次面试C++,如今面试题了如指掌