题目描述:给定一个二叉树的根节点 root ,返回它的 中序 遍历。
示例 1:
输入:root = [1,null,2,3]
输出:[1,3,2]示例 2:
输入:root = []
输出:[]示例 3:
输入:root = [1]
输出:[1]示例 4:
输入:root = [1,2]
输出:[2,1]示例 5:
输入:root = [1,null,2]
输出:[1,2]
方法一:迭代
前序和中序遍历的迭代写法仅仅略有不同:
- 前序遍历需要每次向左走之前就访问根结点
- 而中序遍历先压栈,在出栈的时候才访问
1 | /** |
复杂度分析
时间复杂度:,其中 n 为二叉树节点的个数。二叉树的遍历中每个节点会被访问一次且只会被访问一次。
空间复杂度:O(n)。空间复杂度取决于栈深度,而栈深度在二叉树为一条链的情况下会达到 O(n) 的级别。
执行结果:通过
- 执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
- 内存消耗:36.6 MB, 在所有 Java 提交中击败了69.15%的用户
方法二:递归
1 | class Solution { |
复杂度分析
时间复杂度:O(n),其中 n 为二叉树节点的个数。二叉树的遍历中每个节点会被访问一次且只会被访问一次。
空间复杂度:O(n)。空间复杂度取决于递归的栈深度,而栈深度在二叉树为一条链的情况下会达到 O(n) 的级别。
执行结果:通过
执行用时:0 ms, 在所有 Java 提交中击败了100.00%的用户
内存消耗:36.6 MB, 在所有 Java 提交中击败了69.86%的用户