📅  最后修改于: 2023-12-03 15:21:40.179000             🧑  作者: Mango
在二叉树中,中序遍历是一种遍历方式,它的遍历顺序是:先遍历左子树,再遍历根节点,最后遍历右子树。
递归实现是最常见的二叉树中序遍历方法,代码如下:
def inorderTraversal(root: TreeNode) -> List[int]:
res = []
def dfs(root):
if not root: return
dfs(root.left)
res.append(root.val)
dfs(root.right)
dfs(root)
return res
其中,我们通过递归遍历左子树,再遍历根节点,最后遍历右子树,将遍历结果记录在 res 列表中。
除了递归实现,我们还可以通过迭代的方式实现二叉树中序遍历。
迭代实现的方式,是用一个栈来存储节点。首先遍历到当前节点的左子节点,如果左子节点不为空,将当前节点推入栈中,并将当前节点设置为左子节点;否则,弹出栈顶节点,将节点值添加到结果 res 中,并将当前节点设置为右子节点。
代码如下:
class Solution:
def inorderTraversal(self, root: TreeNode) -> List[int]:
res = []
stack = []
while stack or root:
while root:
stack.append(root)
root = root.left
root = stack.pop()
res.append(root.val)
root = root.right
return res
中序遍历需要遍历二叉树的每个节点,并将遍历结果添加到 res 序列中。因此,时间复杂度为 O(n),其中 n 是节点的数量。
递归实现和迭代实现的空间复杂度均为 O(n),其中 n 是节点的数量,因为需要使用一个栈来存储节点。