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?
首先先是用递归来解决的这道题
/**
* Definition for a binary tree node.
* public class TreeNode {
* int val;
* TreeNode left;
* TreeNode right;
* TreeNode(int x) { val = x; }
* }
*/
public class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> list = new ArrayList<Integer>();
list = preOrder(list,root);
return list;
}
public List<Integer> preOrder(List<Integer> list,TreeNode node){
if(node != null){
list.add(node.val);
list = preOrder(list,node.left);
list = preOrder(list,node.right);
return list;
}
return list;
}
}
由于题目里面有说do it iteratively,于是就有了下面这段使用迭代的方法来解决这倒题
public class Solution {
public List<Integer> preorderTraversal(TreeNode node){
Stack<TreeNode> stack = new Stack<TreeNode>();
List<Integer> list = new ArrayList<Integer>();
if(node != null)
stack.add(node);
while(!stack.isEmpty()){
TreeNode n = stack.pop();
list.add(n.val);
if(n.right != null)
stack.add(n.right);
if(n.left != null)
stack.add(n.left);
}
return list;
}
}