题目描述:
给定一个二叉树的根节点 root
,返回它的 中序 遍历。
进阶: 递归算法很简单,你可以通过迭代算法完成吗?
示例 1:
1 | 输入:root = [1,null,2,3] |
示例 2:
1 | 输入:root = [] |
示例 3:
1 | 输入:root = [1] |
示例 4:
1 | 输入:root = [1,2] |
示例 5:
1 | 输入:root = [1,null,2] |
提示:
- 树中节点数目在范围
[0, 100]
内 -100 <= Node.val <= 100
链接:
https://leetcode-cn.com/problems/binary-tree-inorder-traversal
题目分析
1.递归解法
非常容易想到的解法,也即按照 左子树-根结点-右子树 的顺序递归遍历二叉树即可。
1 | class Solution { |
时间复杂度:$O(n)$,其中 $n$ 为二叉树的结点个数。我们遍历了一次二叉树。
空间复杂度:$O(n)$,其中 $n$ 为二叉树的结点个数。也即栈的深度,而当二叉树是一条链时,最大深度为 $n$。
2.迭代解法
其实我们需要做的就是将递归的栈显式地模拟出来。寻找左结点之前将根结点压栈,直到最左的结点,然后将栈顶出栈并加入到结果中,然后开始遍历右子树。
1 | class Solution { |
时间复杂度:$O(n)$,其中 $n$ 为二叉树的结点个数。我们遍历了一次二叉树。
空间复杂度:$O(n)$,其中 $n$ 为二叉树的结点个数。也即栈的大小。