Given a binary tree, return the preorder traversal of its nodes' values.
For example:
Given binary tree {1,#,2,3}
,
1 \ 2 / 3
return [1,2,3]
.
Note: Recursive solution is trivial, could you do it iteratively?
public class BinaryTreePreorderTraversal {
public ArrayList<Integer> preorderTraversal(TreeNode<Integer> root) {
ArrayList<Integer> r = new ArrayList<Integer>();
if (root == null) {
return r;
}
r.add(root.data);
ArrayList<Integer> left = preorderTraversal(root.left);
ArrayList<Integer> right = preorderTraversal(root.right);
if (left != null)
r.addAll(left);
if (right != null)
r.addAll(right);
return r;
}
}
或者:
public static ArrayList<Integer> preorderTraversal(TreeNode root){
ArrayList<Integer> list = new ArrayList<>();
preorderTraversalHelper(root,list);
return list;
}
private static void preorderTraversalHelper(TreeNode root, ArrayList<Integer> list){
if(root == null) return;
list.add(root.val);
preorderTraversalHelper(root.left, list);
preorderTraversalHelper(root.right,list);
}