📜  二叉树的中到上遍历遍历(1)

📅  最后修改于: 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 是节点的数量,因为需要使用一个栈来存储节点。