https://leetcode.com/problems/binary-tree-postorder-traversal/

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

For example:
Given binary tree {1,#,2,3},

   1\2/3

return [3,2,1].

解题思路:

后序遍历的迭代方式,比前序和中序都要复杂一点。一般,是使用两个stack去操作。

开始和inorder相同,重点在于,如果当前栈顶节点的右子树为空,或者,它的右节点已经被遍历过,才能将栈顶节点弹出,加入结果,并且将其标志为遍历过。

否则,就要将root置为栈顶节点的右子树,继续迭代。也就是对先处理栈顶节点的右子树。

这样才能实现 left - right - root 的顺序。

这里写了一个形式上简单点的方法,只用了一个stack。和前序、中序也较为统一,方便一起记忆。

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode(int x) { val = x; }* }*/
public class Solution {public List<Integer> postorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<Integer>();if(root == null) {return result;}Stack<TreeNode> stack = new Stack<TreeNode>();TreeNode pre = null;while(root != null || stack.size() > 0) {if(root != null) {stack.push(root);root = root.left;} else {TreeNode peek = stack.peek();if(peek.right != null && pre != peek.right) {// stack.push(peek.right);root = peek.right;} else {peek = stack.pop();result.add(peek.val);pre = peek;}}}return result;}
}

转载于:https://www.cnblogs.com/NickyYe/p/4511430.html

Binary Tree Postorder Traversal相关推荐

  1. 5. Binary Tree Postorder Traversal

    Binary Tree Postorder Traversal Given a binary tree, return the postorder traversal of its nodes' va ...

  2. 【二叉树的迭代版后序遍历】LeetCode 145. Binary Tree Postorder Traversal

    LeetCode 145. Binary Tree Postorder Traversal Solution1:递归版答案 二叉树的后序遍历递归版是很简单的,关键是迭代版的代码既难理解又难写!但听了花 ...

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

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

  4. LeetCode 145. Binary Tree Postorder Traversal

    原题链接在这里:https://leetcode.com/problems/binary-tree-postorder-traversal/ 题目: Given a binary tree, retu ...

  5. 145. Binary Tree Postorder Traversal

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

  6. LeetCode:145. Binary Tree Postorder Traversal

    总共想出了四种方法来做. 第一种是递归,不说了.后面集中都是迭代. 第二种是使用一个栈,而且借助一个set来记录哪些node是访问过它的子节点的,防止重复访问.缺点是需要额外的set的空间 class ...

  7. Leetcode 之Binary Tree Postorder Traversal(44)

    后序遍历,比先序和中序都要复杂.访问一个结点前,需要先判断其右孩子是否被访问过.如果是,则可以访问该结点:否则,需要先处理右子树. vector<int> postorderTravers ...

  8. 145. Binary Tree Postorder Traversal 二叉树的后序遍历

    给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1\2/3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? DFS 今天这道题比较简单,直 ...

  9. LC145 Binary Tree Postorder Traversal

    这个题比前序遍历难在,当tmp等于NULL时,stack需要不断地弹出节点,直到检查到一个节点,它的右节点不为空而且还没有被遍历过.这个判断条件写出来还是比较难. 当然,另一种巧妙的做法是,用前序遍历 ...

最新文章

  1. Sublime Text保存文件时自动去掉行末空格
  2. 写CSDN插入图片一直无法显示?
  3. win32线程学习总结(临界区,互斥体,事件,信号量)
  4. 【图文详解】JAVA中的转义字符
  5. 特斯拉否认推出16万元电动车 近期全球多地曝召回
  6. 阿里菜鸟-算法(一面)
  7. 深入理解Javascript之this关键字
  8. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-4.后端项目分层分包及资源文件处理...
  9. C标准库stdio源码分析
  10. 阿里腾讯进击韩国互联网
  11. 苹果手机怎么清理听筒灰尘_iPhone手机听筒声音小、有杂音?成都苹果维修点教你轻松解决...
  12. Captcha Cracker
  13. Touch in Android
  14. 202020 公文系统安装技巧
  15. Selenium基于Python的web自动化测试框架(1)-环境搭建
  16. 高效清除电脑中的灰尘。。。。社会工程学真的很管用
  17. web前端入门到实战:JavaScript字符串转换数字
  18. Windows11重置提示找不到恢复环境怎么解决?
  19. 【数据结构课程设计报告】电话号码查询系统(Java实现)
  20. linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一【转】

热门文章

  1. android之音乐播放和音效播放
  2. 51CTO下载IT类/程序类/开发类资源汇总
  3. 从人的角度分析进销存管理的需求
  4. Python函数01/函数的初识/函数的定义/函数调用/函数的返回值/函数的参数
  5. Mysql和Hadoop+Hive有什么关系?
  6. FTP服务(3)实现基于文件验证的vsftpd虚拟用户
  7. Android之布局RelativeLayout
  8. jQuery遇到问题的小记
  9. 常用SQL语句和HQL语句写法
  10. Linux上使用shell脚本查看内存情况(超实用)