Given a binary tree, return the preorder traversal of its nodes’ values.
For example:
Given binary tree {1,#,2,3},
1
\
2
/
3
解题思路:
递归解法是很普通的先序遍历,非递归的解法灵感来源于我的解题报告LeetCode(114),看不懂的话可以去看一下那篇博客。
递归解法:
public class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> temp = new ArrayList<Integer>();
if(root == null)
return temp;
temp.add(root.val);
temp.addAll(preorderTraversal(root.left));
temp.addAll(preorderTraversal(root.right));
return temp;
}
}
非递归解法:
public class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> temp = new ArrayList<Integer>();
while(root != null){
temp.add(root.val);
if(root.left != null){
TreeNode pre = root.left;
while(pre.right != null){
pre = pre.right;
}
pre.right = root.right;
root.right = root.left;
root.left = null;
}
root = root.right;
//System.out.println(root.val);
}
return temp;
}
}