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]
.
https://oj.leetcode.com/problems/binary-tree-postorder-traversal/
思路1:递归实现。
思路2:迭代实现。
public class Solution { public ArrayList<Integer> postorderTraversal(TreeNode root) { ArrayList<Integer> result = new ArrayList<Integer>(); if (root == null) return result; postTravel(root, result); return result; } private void postTravel(TreeNode node, ArrayList<Integer> result) { if (node.left != null) postTravel(node.left, result); if (node.right != null) postTravel(node.right, result); result.add(node.val); } public static void main(String[] args) { TreeNode root = new TreeNode(1); root.right = new TreeNode(2); root.right.left = new TreeNode(3); System.out.println(new Solution().postorderTraversal(root)); } }
第二遍记录: 直接在递归函数里判断是否为null。
public class Solution { public List<Integer> postorderTraversal(TreeNode root) { List<Integer> res = new ArrayList<Integer>(); postOrder(root,res); return res; } private void postOrder(TreeNode root, List<Integer> res){ if(root!=null){ postOrder(root.left,res); postOrder(root.right,res); res.add(root.val); } } }
非递归实现,需要2个stack。
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> reversedRes = new Stack<Integer>(); stack.push(root); while(!stack.isEmpty()){ TreeNode out = stack.pop(); reversedRes.push(out.val); if(out.left!=null) stack.push(out.left); if(out.right!=null) stack.push(out.right); } while(!reversedRes.isEmpty()){ res.add(reversedRes.pop()); } return res; } }