题目详述
给定一个二叉树,返回它的前序遍历。
解法一
递归。时间复杂度:O(n),空间复杂度:O(logn)
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
List<Integer> res = new ArrayList<>();
TreeNode curr = root;
helper(curr, res);
return res;
}
public void helper(TreeNode root, List res) {
if (root != null) {
res.add(root.val);
if (root.left != null) helper(root.left, res);
if (root.right != null) helper(root.right, res);
}
}
}
解法二
栈。时间复杂度:O(n),空间复杂度:O(n)
class Solution {
public List<Integer> preorderTraversal(TreeNode root) {
if (root == null) return new ArrayList();
List<Integer> res = new ArrayList<>();
Stack<TreeNode> stack = new Stack<>();
TreeNode curr = root;
stack.push(curr);
while (!stack.isEmpty()) {
curr = stack.pop();
res.add(curr.val);
if (curr.right != null) stack.push(curr.right);
if (curr.left != null) stack.push (curr.left);
}
return res;
}
}