[leedcode 145] Binary Tree Postorder Traversal
2015-07-27 13:08
417 查看
Given a binary tree, return the postorder traversal of its nodes' values.
For example:
Given binary tree
return
For example:
Given binary tree
{1,#,2,3},
1 \ 2 / 3
return
[3,2,1].
/** * 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) { //后序遍历和中序遍历不同,因为需要访问完左节点和右节点之后才能访问根节点,因此,保存记录时,需要判断一个节点是否是叶子节点,以及 //他的孩子是否遍历过,此时使用mark做标记,表示子孩子已经遍历过。注意最后向栈内添加子节点的顺序,先push右节点,再push子节点 List<Integer>res=new ArrayList<Integer>(); if(root==null) return res; Stack<TreeNode> stack=new Stack<TreeNode>(); stack.push(root); TreeNode mark=root; //代表已经访问的节点 while(!stack.isEmpty()){ TreeNode node=stack.peek(); if(node.left==null&&node.right==null||node.left==mark||node.right==mark){ res.add(node.val); mark=node; stack.pop(); }else{ if(node.right!=null){//////顺序 stack.push(node.right); } if(node.left!=null){ stack.push(node.left); } } } return res; } /* List<Integer> res; public List<Integer> postorderTraversal(TreeNode root) { res=new ArrayList<Integer>(); if(root==null) return res; getRes(root); return res; } public void getRes(TreeNode root){ if(root==null) return; getRes(root.left); getRes(root.right); res.add(root.val); }*/ }
相关文章推荐
- matlab如何化简表达式/多项式?
- CodeForces 366A - Dima and Guards
- IP config with netsh under windows
- URAL 1023 Buttons
- LIRE(Lucene Image Retrieval)相似图像索引和搜索机制
- 巧用虚拟机 用Windows开发苹果应用
- 非常好的javaweb总结
- iOS Human Interface Guidelines(原创翻译)第四章
- 远程重启server2008
- javascript实现类似百度分享功能的方法
- jquery 事件冒泡的介绍以及如何阻止事件冒泡
- HDU 4081 Qin Shi Huang's National Road System 最小生成树
- shell 入门教程
- pkg-config的用法
- 《Google 开源项目风格指南》中文版
- Struts2 关于返回type="chain"的用法.
- 在新版本的 PHP 中使用旧的 PHP 代码
- (easy)LeetCode 191.Number of 1 Bits
- iCloudManager部署---VMware ESXi 5.5安装及设置(一)
- 分离与合并图像通道的方法