【leetcode】Binary Tree Postorder Traversal
来源:互联网 发布:网络售药全面叫停 编辑:程序博客网 时间:2024/06/02 06:17
题目:
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]
.
Note: Recursive solution is trivial, could you do it iteratively?
如下列出三种解法:一种迭代的和两种iterative的
import java.util.ArrayList;import java.util.List;import java.util.Stack;public class Binary_Tree_Postorder_Traversal {public static class TreeNode { int val; TreeNode left; TreeNode right; TreeNode(int x) { val = x; }}public static void main(String[] args) { TreeNode r1 = new TreeNode(1); TreeNode r2 = new TreeNode(2); TreeNode r3 = new TreeNode(3); TreeNode r4 = new TreeNode(4); TreeNode r5 = new TreeNode(5); TreeNode r6 = new TreeNode(6); r1.left = r2; r1.right = r3; r2.left = r4; r2.right = r5; r3.right = r6; List pr = postorderTraversal1(r1); int size = pr.size(); System.out.println("the size is " + size); for (int i =0 ; i< size; i++) { System.out.println(pr.get(i)); }}public static List<Integer> postorderTraversal1(TreeNode root) {ArrayList<Integer> result = new ArrayList<Integer>();if (root == null)return result;result.addAll(postorderTraversal1(root.left));result.addAll(postorderTraversal1(root.right));result.add(root.val);return result;}public static List<Integer> postorderTraversal2(TreeNode root) { ArrayList<Integer> result = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); Stack<TreeNode> output = new Stack<TreeNode>(); if (root == null) return result; stack.push(root); while(!stack.empty()) { TreeNode cur = stack.pop(); output.push(cur); if(cur.left != null) { stack.push(cur.left); } if(cur.right != null) { stack.push(cur.right); } } while(!output.isEmpty()) { result.add(output.pop().val); } return result;}public List<Integer> postorderTraversal3(TreeNode root) { ArrayList<Integer> result = new ArrayList<Integer>(); Stack<TreeNode> stack = new Stack<TreeNode>(); TreeNode prev = null; // previously traversed node TreeNode curr = root; if (root == null) { return result; } stack.push(root); while (!stack.empty()) { curr = stack.peek(); if (prev == null || prev.left == curr || prev.right == curr) { // traverse down the tree if (curr.left != null) { stack.push(curr.left); } else if (curr.right != null) { stack.push(curr.right); } } else if (curr.left == prev) { // traverse up the tree from the left if (curr.right != null) { stack.push(curr.right); } } else { // traverse up the tree from the right result.add(curr.val); stack.pop(); } prev = curr; } return result;}}
1 0
- LeetCode Binary Tree Postorder Traversal
- LeetCode:Binary Tree Postorder Traversal
- Leetcode: Binary Tree Postorder Traversal
- Leetcode: Binary Tree Postorder Traversal
- LeetCode:Binary Tree Postorder Traversal
- Leetcode Binary Tree Postorder Traversal
- [LeetCode]Binary Tree Postorder Traversal
- [LeetCode] Binary Tree Postorder Traversal
- leetcode Binary Tree Postorder Traversal
- 【LeetCode】Binary Tree Postorder Traversal
- LeetCode | Binary Tree Postorder Traversal
- Leetcode: Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal - LeetCode
- LeetCode - Binary Tree Postorder Traversal
- [LeetCode]Binary Tree Postorder Traversal
- Binary Tree Postorder Traversal -- LeetCode
- [LeetCode]Binary Tree Postorder Traversal
- 【LeetCode】Binary Tree Postorder Traversal
- 程序员和特种兵 几分相似几分无奈
- 常用的C#正则表达式!
- asdf
- 隐马尔可夫模型(HMM)攻略
- HDU1211 RSA
- 【leetcode】Binary Tree Postorder Traversal
- Cpp拾零(to be continued)
- 如何做一名优秀的团队领导?LinkedIn CEO给出的3条建议
- 启用Oracle 11g中的Apex
- 算法的封装与切换——策略模式
- poj1014+hdu1059--A - Dividing(多重背包,二进制优化)
- 如何“玩”微信
- 详解 Linux cp命令
- 求解惑ProductView Express 浏览器预览prt文件的时候蓝屏。见图