二叉树的后序遍历

后序遍历(LRD)是二叉树遍历的一种,也叫做后根遍历、后序周游,记为左右根,简记:左右根。

步骤(非递归):
⼆叉树的后序遍历顺序是左-右-根。在这里仍然采用棧来进行辅助,具体步骤如下:
1、把⼆叉树的根节点 root 放进栈。
2、如果栈不为空,从栈中取出⼀个节点,把该节点插⼊到容器的头部。如果该节点的左⼦树不为空,则把该左⼦树放⼊栈中;如果该节点的右⼦树不为空,则把右⼦树放⼊栈中。
注意,之前的前序遍历和中序遍历,我们都是⽤ ArrayList 容器,并且是把节点插⼊到容器的尾部,这就是后序遍历的不同点。
3、⼀直重复步骤 2 ,直到栈为空,此时遍历结束
代码:

public static List<Integer> postOrder(TreeNode root){//后序遍历(非递归)LinkedList<Integer> result = new LinkedList<Integer>();//注意,采用链表Stack<TreeNode> stack = new Stack<TreeNode>();if(root==null) {return result;}stack.push(root);while(!stack.isEmpty()) {TreeNode tmp = stack.pop();//注意,是放在第一个位置result.addFirst(tmp.value);if(tmp.left!=null) {stack.push(tmp.left);}if(tmp.right!=null) {stack.push(tmp.right);}}return result;}public static void postOrederTre(TreeNode root) {//后序遍历(递归)if(root==null) {return;}else {postOrederTre(root.left);postOrederTre(root.right);System.out.println(root.value);}}

非递归while部分的思路如下图所示,可以用一个很简单的二叉树来进行后序遍历,根据左右根的思路将根先放在linkedlist的第一位,然后再将右孩子插入list的第一位,接着左孩子插入第一位,如箭头所示的方向:

二叉树的后序遍历(递归和非递归)相关推荐

  1. 非递归遍历二叉树(后序遍历)

    非递归遍历二叉树(后序遍历) 在二叉树的遍历中,分为递归遍历与非递归遍历.非递归遍历的执行效率较高,时间复杂度小,因此采用非递归遍历有利于提高代码运行效率. //后序遍历非递归实现 void Post ...

  2. 详解二叉树的后序遍历

    后序遍历:首先遍历左子树,然后遍历右子树,最后访问根节点(左->右->根) 后序遍历的递归算法 思路: 遍历左子树 遍历右子树 访问根节点 代码如下: //二叉树的后序遍历(递归) voi ...

  3. 2、二叉树的后序遍历

      给你一颗已经创建完成的二叉树,请你根据要求完成该树的遍历实现.提供给你的使用归档文件DSjar.jar,该文件包含了二叉树需要使用的类型和栈队列等相关类型,并提供了一个创建树的静态方法, 你可以使 ...

  4. 刻意练习:LeetCode实战 -- 二叉树的后序遍历

    背景 今天,第二期基础算法(Leetcode)刻意练习训练营 的打卡任务是二叉树的中序遍历,由于二叉树的遍历方式通常来说有四种:前序遍历.中序遍历.后序遍历以及层次遍历,而LeetCode也有二叉树的 ...

  5. [LeetCode] Binary Tree Postorder Traversal 二叉树的后序遍历

    Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary ...

  6. 二叉树后序遍历_LeetCode算法145. 二叉树的后序遍历

    leetcode LeetCode算法-145. 二叉树的后序遍历 145. 二叉树的后序遍历 题目 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1 \ 2 / ...

  7. LeetCode-145:二叉树的后序遍历

    题目描述: 给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3]      1     \      2     /    3 输出: [3,2,1] 思路分析: 递归法: ...

  8. PTA L2-006 树的遍历-二叉树的后序遍历+中序遍历,输出层序遍历 团体程序设计天梯赛-练习集...

    L2-006 树的遍历 (25 分) 给定一棵二叉树的后序遍历和中序遍历,请你输出其层序遍历的序列.这里假设键值都是互不相等的正整数. 输入格式: 输入第一行给出一个正整数N(≤),是二叉树中结点的个 ...

  9. 二叉树的后序遍历(C语言)

    首先我们从两个方面讲解二叉树的后序遍历(递归+迭代) 一.二叉树的后序遍历.(递归) 思想: 首先我们从二叉树的根节点开始先遍历其左孩子,①接着同样继续遍历其左孩子的左孩子,直到某个左孩子节点的左孩子 ...

最新文章

  1. 容易忽视的十大SQL优化方案!
  2. 微云存照片会变模糊吗_QQ相册里的照片,为什么放一段时间就会变模糊?今天可算知道了...
  3. 操作系统:再见CentOS,将于本月底终止维护!
  4. MySQL数据处理之增删改,MySQL8新特性计算列,完整详细可收藏
  5. 前端学习(3237):react生命周期4
  6. Linux内核:网络过滤器简介与示例代码
  7. python实现文件格式转换_python实现快速文件格式批量转换的方法
  8. nginx访问量统计
  9. win7关闭开机启动项_电脑开机非常慢?原来是有软件偷偷自启动,教你一招彻底关闭它们...
  10. Joda-Time简单使用
  11. 【校招】SHL 的 General Ability (GA, 通用能力测试)
  12. AD9在PCB中放大元件后,元件表面出现网格
  13. Python爬虫:爬取手机App数据,记得安装配置Charles
  14. Devops知识技能树(译)
  15. gmail如何配置163邮箱服务器端口,hotmail,gmail,live,QQ,163,yahoo邮箱服务器及端口号,outlook,foxmail 设置...
  16. 一步成高手:终极图解内存(上篇)
  17. java 根据数据库中存储的文件名批量修改本地文件的文件名后缀名
  18. 计算智能3--进化计算
  19. 腾讯云轻量应用服务器搭建网站
  20. mysql结果作为另一次查询_MySql中一次查询结果用作二次查询条件

热门文章

  1. 4.16周赛---玩游戏
  2. Linux-vim设置
  3. 血亏五六千,微信红包封面翻车实录
  4. 6-3 sdust-Java-模拟主板、USB口、TypeC口、PS2口设备 (20 分)
  5. html设置ie9兼容性视图,ie9浏览器设置兼容性视图在哪里设置
  6. 删除桌面上的两个IE图标
  7. nbu客户端卸载_卸载NETBACKUP FOR LINUX
  8. RV1126RV1109 buildroot 增加USB双摄支持(一)
  9. Matlab小结6(线性规划)
  10. 【p093】细胞分裂