题目描述:

链接: https://leetcode-cn.com/problems/binary-tree-preorder-traversal/submissions/

解题方法:

  1. 递归 O(N), O(N)
  2. 迭代(模拟递归) O(N), O(N)

代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    public void preorder(List<Integer> result, TreeNode root) {
        if (root == null) return;
        result.add(root.val);
        preorder(result, root.left);
        preorder(result, root.right);
    }
    // 迭代
    public void preorderRecursive(List<Integer> result, TreeNode root) {
        if (root == null) return;
        Stack<TreeNode> stack = new Stack<>();
        stack.push(root);
        while (!stack.isEmpty()) {
            TreeNode node = stack.pop();
            result.add(node.val);
            if (node.right != null) stack.push(node.right);
            if (node.left != null) stack.push(node.left);
        }
    }

    // 递归
    public void preorderIterative(List<Integer> result, TreeNode root) {
        if (root == null) return;
        result.add(root.val);
        preorder(result, root.left);
        preorder(result, root.right);
    }

    // 主函数
    public List<Integer> preorderTraversal(TreeNode root) {

        List<Integer> result = new ArrayList<>();
        preorderRecursive(result, root);
        //preorderIterative(result, root);
        return result;
    }
}