当前位置: 首页 > news >正文

二叉树三大遍历-精髓(Java)

写在前面

leetcode:94. 二叉树的中序遍历

递归:很简单,只需调换顺序。但不能死记硬背,递归的精髓在于只需要处理好边界条件,其他交给数学归纳法即可,不要一开始就深入递归,在脑袋想它每一步的步骤,这是错误的方法。

非递归:必会,因为面试考核不会只考你递归写法,非递归的话按照我的思路,前序和后序是一个解法,中序是一个解法,都很容易理解。

什么是前序、中序、后序

前中后体现在根的遍历时机。

前序:根 左子树 右子树

中序:左子树 根 右子树

后序:左子树 右子树 根

二叉树的结构

 public class TreeNode {int val;TreeNode left;TreeNode right;TreeNode() {}TreeNode(int val) { this.val = val; }TreeNode(int val, TreeNode left, TreeNode right) {this.val = val;this.left = left;this.right = right;}
}

递归

递归思路

  1. 确定递归函数的参数和返回值: 确定哪些参数是递归的过程中需要处理的,那么就在递归函数里加上这个参数, 并且还要明确每次递归的返回值是什么进而确定递归函数的返回类型。
  2. 确定终止条件: 写完了递归算法, 运行的时候,经常会遇到栈溢出的错误,就是没写终止条件或者终止条件写的不对,操作系统也是用一个栈的结构来保存每一层递归的信息,如果递归没有终止,操作系统的内存栈必然就会溢出。
  3. 确定单层递归的逻辑: 确定每一层递归需要处理的信息。在这里也就会重复调用自己来实现递归的过程。

前序+中序+后序

只需要调整`list.add(root.val);`代码的顺序即可,比如以下代码分别为前序和中序。

非递归

前序 + 后序

前序

先序:先压栈push头节点;然后下面步骤。

1)pop一个节点cur;

2)处理cur;

3)先push右节点,再push左节点(如果有的话);

4)循环上3个步骤;

解释:
(1)为什么先入栈右节点,因为栈是先进后出,为了实现先遍历左节点的效果,需要左节点晚一些入栈。
(2)为什么不需要压栈根节点,因为所有的子树都会被用左右节点分解,这里根节点的概念也就是左右节点的概念了。

 

    后序

    改一下先序的代码即可,先序压栈是先右后左,颠倒一下,得到的遍历顺序就是 中右左,再result数组反转一下,就变成想要的 左右中。

    中序

    中序:不断把左边界压栈,没有了就穿到右边继续左边界。【因为所有的树都可以被左边界分解掉】左根右,右会被不断分解为左根右。

    1)每棵子树整棵树左边界进栈,

    2)依次弹出的过程中,打印,对弹出节点的右子树周而复始。

    解释:
    (1)为什么这里需要多加一个指针,因为先序、后序{ 处理 } 和{ 遍历 }的节点顺序是一致的,中序没办法,他是遍历到左下角才处理,无法灵敏控制达到这种效果,必须借助栈来暂存元素。

    (2)指针动向:

    • 指针非空就压栈并往左,指针为空就出栈输出并往右【不管遍历到左节点还是右节点的指针为空,都是直接出栈输出】
    • 弹出之后只需要指向他的右孩子即可。【左 根 右】

    相关文章:

  1. Python 对象引用、可变性和垃圾 回收(标识、相等性和别名)
  2. 酒店等场所客房沐浴用品批发要点:满足多样需求,把握关键环节
  3. 精讲C++四大核心特性:内联函数加速原理、auto智能推导、范围for循环与空指针进阶
  4. numpy模块综合使用
  5. 进程间关系与守护进程
  6. BGP基础配置实验
  7. 机械物理:水力发电站工作原理是什么?
  8. EdgeOne Pages MCP 入门教程
  9. LVGL简易计算器实战
  10. 在 Java 中使用 JSON Pointer 高效提取 JSON 数据
  11. C++入门篇——类和对象(下)
  12. YashanDB(崖山数据库)V23.4 LTS 正式发布
  13. 学习黑客5 分钟深入浅出理解Windows Editions
  14. ESG在2050,我们听到了另一种声音 | 活动回顾
  15. JavaSE核心知识点02面向对象编程02-07(枚举)
  16. 深入理解 JavaScript 中的 FileReader API:从理论到实践
  17. Python基础语法(中)
  18. 多模态大语言模型arxiv论文略读(六十八)
  19. 学习黑客5 分钟小白弄懂Windows Desktop GUI
  20. TikTok 运营干货:内容创作与 AI 增效
  21. 人民日报访巴西总统卢拉:“巴中关系正处于历史最好时期”
  22. 训练孩子的科学思维,上海虹口推出“六个一百”旗舰工程
  23. 应急部:正在积极推动各地逐步科学建设改造应急避难场所
  24. 浙江省机电集团党委书记、董事长廉俊接受审查调查
  25. 重庆三峡学院回应“85万元中标设备,网购价不到300元”:已着手解决
  26. “犍陀罗艺术与亚洲文明”在浙大对外展出