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?
public class BinaryTreePostorderTraversal {
public ArrayList<Integer> postorderTraversal(TreeNode<Integer> root) {
if(root == null){
return new ArrayList<Integer>();
}
ArrayList<Integer> left = postorderTraversal(root.left);
ArrayList<Integer> right = postorderTraversal(root.right);
left.addAll(right);
left.add(root.data);
return left;
}
}
或者:
public static ArrayList<Integer> postorderTraversal(TreeNode root){
ArrayList<Integer> list = new ArrayList<>();
if(root == null) return list;
postorderTraversalHelper(root,list);
return list;
}
private static void postorderTraversalHelper(TreeNode root, ArrayList<Integer> list){
if(root == null) return;
postorderTraversalHelper(root.left,list);
postorderTraversalHelper(root.right,list);
list.add(root.val);
}