Binary Tree Preorder Traversal
Given a binary tree, return the preorder traversal of its nodes' values.
Example
Given:
1
/ \
2 3
/ \
4 5
return[1,2,4,5,3]
.
traverse: return void
public class Solution {
/*
* @param root: A Tree
* @return: Preorder in ArrayList which contains node values.
*/
public List<Integer> preorderTraversal(TreeNode root) {
// write your code here
List<Integer> ret = new ArrayList<Integer>();
if(root == null)
return ret;
helper(root, ret);
return ret;
}
public void helper(TreeNode root, List<Integer> ret){
if(root == null)
return ;
ret.add(root.val);
helper(root.left, ret);
helper(root.right, ret);
}
}
Divide and conqure
public List<Integer> preorderTraversal(TreeNode root) {
// write your code here
List<Integer> ret = new ArrayList<Integer>();
if(root == null)
return ret;
List<Integer> left = preorderTraversal(root.left);
List<Integer> right = preorderTraversal(root.right);
ret.add(root.val);
ret.addAll(left);
ret.addAll(right);
return ret;
}
iterative
preorder是唯一一个while循环里没有cur != null 的,也是唯一一个while循环前先把root加入stack的,所以while只需要判断stack是否为空。注意这里先压右子树再压左子树。
public List<Integer> preorderTraversal(TreeNode root) {
// write your code here
List<Integer> ret = new ArrayList<Integer>();
if(root == null)
return ret;
Stack<TreeNode> s = new Stack<TreeNode>();
s.push(root);
while(!s.isEmpty()){
TreeNode cur = s.pop();
ret.add(cur.val);
if(cur.right != null){
s.push(cur.right);
}
if(cur.left != null){
s.push(cur.left);
}
}
return ret;
}
Last updated
Was this helpful?