Binary Tree Postorder Traversal
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相关推荐
- 5. Binary Tree Postorder Traversal
Binary Tree Postorder Traversal Given a binary tree, return the postorder traversal of its nodes' va ...
- 【二叉树的迭代版后序遍历】LeetCode 145. Binary Tree Postorder Traversal
LeetCode 145. Binary Tree Postorder Traversal Solution1:递归版答案 二叉树的后序遍历递归版是很简单的,关键是迭代版的代码既难理解又难写!但听了花 ...
- [LeetCode] Binary Tree Postorder Traversal 二叉树的后序遍历
Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary ...
- LeetCode 145. Binary Tree Postorder Traversal
原题链接在这里:https://leetcode.com/problems/binary-tree-postorder-traversal/ 题目: Given a binary tree, retu ...
- 145. Binary Tree Postorder Traversal
Given a binary tree, return the postorder traversal of its nodes' values. For example: Given binary ...
- LeetCode:145. Binary Tree Postorder Traversal
总共想出了四种方法来做. 第一种是递归,不说了.后面集中都是迭代. 第二种是使用一个栈,而且借助一个set来记录哪些node是访问过它的子节点的,防止重复访问.缺点是需要额外的set的空间 class ...
- Leetcode 之Binary Tree Postorder Traversal(44)
后序遍历,比先序和中序都要复杂.访问一个结点前,需要先判断其右孩子是否被访问过.如果是,则可以访问该结点:否则,需要先处理右子树. vector<int> postorderTravers ...
- 145. Binary Tree Postorder Traversal 二叉树的后序遍历
给定一个二叉树,返回它的 后序 遍历. 示例: 输入: [1,null,2,3] 1\2/3 输出: [3,2,1] 进阶: 递归算法很简单,你可以通过迭代算法完成吗? DFS 今天这道题比较简单,直 ...
- LC145 Binary Tree Postorder Traversal
这个题比前序遍历难在,当tmp等于NULL时,stack需要不断地弹出节点,直到检查到一个节点,它的右节点不为空而且还没有被遍历过.这个判断条件写出来还是比较难. 当然,另一种巧妙的做法是,用前序遍历 ...
最新文章
- Sublime Text保存文件时自动去掉行末空格
- 写CSDN插入图片一直无法显示?
- win32线程学习总结(临界区,互斥体,事件,信号量)
- 【图文详解】JAVA中的转义字符
- 特斯拉否认推出16万元电动车 近期全球多地曝召回
- 阿里菜鸟-算法(一面)
- 深入理解Javascript之this关键字
- 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_2-4.后端项目分层分包及资源文件处理...
- C标准库stdio源码分析
- 阿里腾讯进击韩国互联网
- 苹果手机怎么清理听筒灰尘_iPhone手机听筒声音小、有杂音?成都苹果维修点教你轻松解决...
- Captcha Cracker
- Touch in Android
- 202020 公文系统安装技巧
- Selenium基于Python的web自动化测试框架(1)-环境搭建
- 高效清除电脑中的灰尘。。。。社会工程学真的很管用
- web前端入门到实战:JavaScript字符串转换数字
- Windows11重置提示找不到恢复环境怎么解决?
- 【数据结构课程设计报告】电话号码查询系统(Java实现)
- linux驱动由浅入深系列:tinyalsa(tinymix/tinycap/tinyplay/tinypcminfo)音频子系统之一【转】