LeetCode 94 — 二叉树的中序遍历

题目描述

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

示例:

输入:root = [1,null,2,3]
输出:[1,3,2]

题目分析

递归:递归左子树 -> 把当前结点加入列表中 -> 递归右子树
迭代:先让当前结点入栈,再处理左子结点,最后处理右子结点

Java

public List<Integer> inorderTraversal(TreeNode root) {
    List<Integer> ans = new ArrayList<>();
    if (root == null) {
        return ans;
    }
    ans.addAll(inorderTraversal(root.left));
    ans.add(root.val);
    ans.addAll(inorderTraversal(root.right));
    return ans;
}


public List<Integer> inorderTraversal2(TreeNode root) {
    List<Integer> ans = new ArrayList<>();
    Deque<TreeNode> stack = new LinkedList<>();
    TreeNode cur = root;
    while (cur != null || !stack.isEmpty()) {
        while (cur != null) {
            stack.push(cur);
            cur = cur.left;
        }
        cur = stack.pop();
        ans.add(cur.val);
        cur = cur.right;
    }

    return ans;
}

Kotlin

// 递归
fun inorderTraversal(root: TreeNode?): List<Int> {
    val ans = ArrayList<Int>()
    if (root == null) {
        return ans
    }
    ans.addAll(inorderTraversal(root.left))
    ans.add(root.`val`)
    ans.addAll(inorderTraversal(root.right))
    return ans
}

// 迭代
// 使用栈模拟
fun inorderTraversal2(root: TreeNode?): List<Int> {
    val ans = ArrayList<Int>()
    val stack = LinkedList<TreeNode>()
    var cur = root
    while (cur != null || !stack.isEmpty()) {
        while (cur != null) {
            stack.push(cur)
            cur = cur.left
        }
        cur = stack.pop()
        ans.add(cur.`val`)
        cur = cur.right
    }

    return ans
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

开始在上面输入您的搜索词,然后按回车进行搜索。按ESC取消。

返回顶部