LeetCode题解-145-Binary Tree Postorder Traversal
2016-07-08 20:56
513 查看
尽管写LeetCode解答主要是为了自己整理思路,但是如果对您也正好有帮助,请点个赞给菜鸟一点鼓励吧 :-)
原题
解法概览
解法1为递归;解法2位迭代。
解法1
解题思路
递归法。后序遍历左子树,后序遍历右子树,访问根节点。代码
public class Solution145_recursive { public List<Integer> postorderTraversal(TreeNode root) { ArrayList<Integer> treeValList = new ArrayList<Integer>(); if (root == null) return treeValList; ArrayList<Integer> leftTreeValList = (ArrayList<Integer>) postorderTraversal(root.left); ArrayList<Integer> rightTreeValList = (ArrayList<Integer>) postorderTraversal(root.right); treeValList.addAll(leftTreeValList); treeValList.addAll(rightTreeValList); treeValList.add(root.val); return treeValList; } }
解法2
解题思路
1)当栈顶指针非空,应遍历左子树(遍历时不访问节点);2)若从左子树返回,如果当前节点的右子树为空或者已被访问,那么右子树进栈,否则出栈,访问该节点。
图解
看不清图的话可以在浏览器 页面中单独打开。代码
<pre name="code" class="java">public class Solution145_iterator { public List<Integer> postorderTraversal(TreeNode root) { Stack<TreeNode> treeNodeStack = new Stack<TreeNode>(); ArrayList<Integer> treeNodeList = new ArrayList<Integer>(); treeNodeStack.push(root); TreeNode lastVisit = null; while (!treeNodeStack.empty()){ while (treeNodeStack.peek() != null){ TreeNode currentNode = treeNodeStack.peek(); treeNodeStack.push(currentNode.left); } treeNodeStack.pop(); if (!treeNodeStack.isEmpty()){ TreeNode currentNode = treeNodeStack.peek(); if (currentNode.right == null || currentNode.right == lastVisit){ lastVisit = treeNodeStack.pop(); treeNodeList.add(lastVisit.val); treeNodeStack.push(null); } else{ treeNodeStack.push(currentNode.right); } } } return treeNodeList; } }
相关文章推荐
- 命令行快速技巧:如何定位一个文件
- C#递归算法之分而治之策略
- 有关数据库SQL递归查询在不同数据库中的实现方法
- C#中的递归APS和CPS模式详解
- WinForm实现按名称递归查找控件的方法
- C#递归方法实现无限级分类显示效果实例
- jquery+CSS实现的多级竖向展开树形TRee菜单效果
- 使用SqlServer CTE递归查询处理树、图和层次结构
- C#递归算法之打靶算法分析
- C#中的尾递归与Continuation详解
- C#递归实现显示文件夹及所有文件并计算其大小的方法
- php递归创建目录的方法
- PHP递归创建多级目录
- cmd tree命令 以树形格式罗列文件
- Javascript递归打印Document层次关系实例分析
- 无限分级和tree结构数据增删改【附DEMO下载】
- 实例讲解jQuery EasyUI tree中state属性慎用
- 推荐8款jQuery轻量级树形Tree插件
- C#递归算法寻找数组中第K大的数
- C++使用递归方法求n阶勒让德多项式完整实例