LeetCode第94题 - 二叉树的中序遍历

题目

给定一个二叉树,返回它的中序遍历。

解答:递归法

private void inorder(TreeNode node, List<Integer> nodes) {
    if (node == null) {
        return;
    }

    inorder(node.left, nodes);
    nodes.add(node.val);
    inorder(node.right, nodes);
}

public List<Integer> inorderTraversal(TreeNode root) {
    List<Integer> nodes = new ArrayList<>();
    inorder(root, nodes);
    return nodes;
}

解答:迭代法

public List<Integer> inorderTraversal(TreeNode root) {
    Deque<TreeNode> nodes = new LinkedList<>();
    List<Integer> values = new ArrayList<>();

    TreeNode node = null;

    node = root;
    while (node != null) {
        nodes.addFirst(node);
        node = node.left;
    }

    while (!nodes.isEmpty()) {
        node = nodes.removeFirst();
        values.add(node.val);

        node = node.right;
        while (node != null) {
            nodes.addFirst(node);
            node = node.left;
        }
    }

    return values;
}

要点
递归法,很直接。
迭代法,稍微有点复杂,需要仔细琢磨;基于栈实现,左链入栈。

你可能感兴趣的:(LeetCode,leetcode,java)