给定一个二叉树,返回它的 前序 遍历。
示例:
输入: [1,null,2,3]
1
\
2
/
3
输出: [1,2,3]
进阶: 递归算法很简单,你可以通过迭代算法完成吗?

法一:递归

  1. //Definition for a binary tree node.
  2. public class TreeNode {
  3. int val;
  4. TreeNode left;
  5. TreeNode right;
  6. TreeNode(int x) { val = x; }
  7. }
  8. class Solution {
  9. public List<Integer> preorderTraversal(TreeNode root) {
  10. ArrayList<Integer> pre = new ArrayList<>();
  11. preHelper(root,pre);
  12. return pre;
  13. }
  14. public void preHelper(TreeNode root, List<Integer> pre) {
  15. if(root==null) return;
  16. pre.add(root.val);
  17. preHelper(root.left,pre);
  18. preHelper(root.right,pre);
  19. }
  20. }

144. 二叉树的前序遍历(递归、迭代)2 - 图1

法二:迭代

  1. //Definition for a binary tree node.
  2. public class TreeNode {
  3. int val;
  4. TreeNode left;
  5. TreeNode right;
  6. TreeNode(int x) { val = x; }
  7. }
  8. class Solution {
  9. public List<Integer> preorderTraversal(TreeNode root) {
  10. Stack<Integer> res = new Stack<>();
  11. Stack<TreeNode> stack = new Stack<>();
  12. stack.push(root);
  13. while (!stack.isEmpty()) {
  14. TreeNode node = stack.pop();
  15. if (node != null) {
  16. res.add(node.val);
  17. stack.push(node.right);
  18. stack.push(node.left);
  19. }
  20. }
  21. return res;
  22. }
  23. }

144. 二叉树的前序遍历(递归、迭代)2 - 图2