[leetcode]Binary Tree Postorder Traversal
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]
.Note: Recursive solution is trivial, could you do it iteratively?
算法思路:
最简单的后序遍历。不解释了。
代码如下:
1 public class Solution { 2 List<Integer> res = new ArrayList<Integer>(); 3 public List<Integer> postorderTraversal(TreeNode root) { 4 if(root == null) return res; 5 if(root.left != null) postorderTraversal(root.left); 6 if(root.right != null) postorderTraversal(root.right); 7 res.add(root.val); 8 return res; 9 } 10 }
非递归实现:
需要两个栈,一个数字栈用来记录后序遍历的逆序,一个节点栈来遍历整棵树,如果不明白也没关系,有个绝招!背下来吧。。。。
代码如下:
public class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); if(root == null) return res; Stack<TreeNode> stack = new Stack<TreeNode>(); Stack<Integer> intStack = new Stack<Integer>(); stack.push(root); while(!stack.isEmpty()){ TreeNode node = stack.pop(); intStack.push(node.val); if(node.left != null) stack.push(node.left); if(node.right != null) stack.push(node.right); } while(!intStack.isEmpty()){ res.add(intStack.pop()); } return res; } }