Skip to content

🌴 二叉树的中序遍历

📝 题目描述

​ 给你二叉树的根节点root,返回其节点值的中序遍历。

📋 代码模板

java
/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode() {}
 *     TreeNode(int val) { this.val = val; }
 *     TreeNode(int val, TreeNode left, TreeNode right) {
 *         this.val = val;
 *         this.left = left;
 *         this.right = right;
 *     }
 * }
 */
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {

    }
}
typescript
/**
 * Definition for a binary tree node.
 * class TreeNode {
 *     val: number
 *     left: TreeNode | null
 *     right: TreeNode | null
 *     constructor(val?: number, left?: TreeNode | null, right?: TreeNode | null) {
 *         this.val = (val===undefined ? 0 : val)
 *         this.left = (left===undefined ? null : left)
 *         this.right = (right===undefined ? null : right)
 *     }
 * }
 */

function inorderTraversal(root: TreeNode | null): number[] {
    
}

💡 提示

  1. 树中节点数目在范围 [0,100]
  2. 100<=Node.val<=100

🚀 示例

🖊️ 题解

递归

可惜没有如果

java
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list = new LinkedList<>();
        dfs(root, list);
        return list;
    }

    private void dfs(TreeNode node, List<Integer> list) {
        if (node == null) {
            return;
        }
        dfs(node.left, list);
        list.add(node.val);
        dfs(node.right, list);
    }
}
typescript
function inorderTraversal(root: TreeNode | null): number[] {
    const list: number[] = [];
    dfs(root, list);
    return list;
}

function dfs(node: TreeNode | null, list: number[]): void {
    if (node == null) {
        return;
    }
    dfs(node.left, list);
    list.push(node.val);
    dfs(node.right, list);
}

迭代

可惜没有如果

java
class Solution {
    public List<Integer> inorderTraversal(TreeNode root) {
        List<Integer> list = new LinkedList<>();
        if (root == null) {
            return list;
        }
        Deque<TreeNode> stack = new LinkedList<>();
        while (!stack.isEmpty() || root != null) {
            while (root != null) {
                stack.push(root);
                root = root.left;
            }
            TreeNode node = stack.pop();
            list.add(node.val);
            if (node.right != null) {
                root = node.right;
            }
        }
        return list;
    }
}
typescript
function inorderTraversal(root: TreeNode | null): number[] {
    const list: number[] = [];
    if (root == null) {
        return list;
    }
    const stack: TreeNode[] = [];
    while (stack.length > 0 || root != null) {
        while (root != null) {
            stack.push(root);
            root = root.left;
        }
        const node: TreeNode = stack.pop()!;
        list.push(node.val);
        if (node.right != null) {
            root = node.right;
        }
    }
    return list;
}

💭 复杂度分析

上次更新于: