Given a binary tree, return the preorder traversal of its nodes’ values.

    Example:

    1. Input: [1,null,2,3]
    2. 1
    3. \
    4. 2
    5. /
    6. 3
    7. Output: [1,2,3]

    Follow up: Recursive solution is trivial, could you do it iteratively?


    题意

    求树的前序遍历。

    思路

    递归或者迭代。


    代码实现 - 递归

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

    代码实现 - 迭代

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