144. Binary Tree Preorder Traversal
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?
思路1:trival的思路,recursive
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> pre = new LinkedList<Integer>();
preHelper(root,pre);
return pre;
}
public void preHelper(TreeNode root, List<Integer> pre) {
if(root==null) return;
pre.add(root.val);
preHelper(root.left,pre);
preHelper(root.right,pre);
}
思路2:用stack实现iteration'
public class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
if (root==null){
return list;
}
Stack<TreeNode> st = new Stack<TreeNode>();
st.push(root);
while(!st.empty()){
TreeNode node = st.pop();
list.add(node.val);
if (node.left!=null){
st.push(node.left);
}
if (node.right!=null){
st.push(node.right);
}
}
return list;
}
}