📜  数据结构 |二叉树 |问题 12(1)

📅  最后修改于: 2023-12-03 14:54:56.089000             🧑  作者: Mango

数据结构 | 二叉树 | 问题 12

简介

在计算机科学中,二叉树是一种重要的非线性数据结构,它由许多节点组成,每个节点最多有两个子节点,且每个子节点都是独立的二叉树。二叉树有许多重要的应用,例如在操作系统的进程调度、编译器的表达式求值和数据库系统的索引算法中都有广泛的应用。

问题 12 主要涉及到二叉树的遍历算法,包括先序遍历、中序遍历和后序遍历。在二叉树的遍历算法中,我们按照一定的规则依次访问每个节点,并且每个节点仅被访问一次。这些遍历算法非常重要,不仅仅是因为它们是二叉树的基本操作,而且它们也是很多高级算法的基础。

先序遍历

先序遍历是一种递归的遍历算法,它按照先访问根节点,然后按照先序遍历左子树,再先序遍历右子树的顺序依次遍历整个二叉树。先序遍历的代码如下:

def preorderTraversal(root: TreeNode) -> List[int]:
    res = []

    def traverse(node):
        if node:
            res.append(node.val)
            traverse(node.left)
            traverse(node.right)

    traverse(root)
    return res

这里我们使用了一个辅助函数 traverse 来遍历整个二叉树。在遍历二叉树的某个节点时,我们首先将该节点的值添加到结果列表中,然后按照先序遍历的顺序遍历它的左右子树。

中序遍历

中序遍历是一种递归的遍历算法,它按照先中序遍历左子树,然后访问根节点,最后中序遍历右子树的顺序依次遍历整个二叉树。中序遍历的代码如下:

def inorderTraversal(root: TreeNode) -> List[int]:
    res = []

    def traverse(node):
        if node:
            traverse(node.left)
            res.append(node.val)
            traverse(node.right)

    traverse(root)
    return res

这里我们使用了一个辅助函数 traverse 来遍历整个二叉树。在遍历二叉树的某个节点时,我们首先按照中序遍历的顺序遍历它的左子树,然后将该节点的值添加到结果列表中,最后按照中序遍历的顺序遍历它的右子树。

后序遍历

后序遍历是一种递归的遍历算法,它按照先后序遍历左子树,然后后序遍历右子树,最后访问根节点的顺序依次遍历整个二叉树。后序遍历的代码如下:

def postorderTraversal(root: TreeNode) -> List[int]:
    res = []

    def traverse(node):
        if node:
            traverse(node.left)
            traverse(node.right)
            res.append(node.val)

    traverse(root)
    return res

这里我们使用了一个辅助函数 traverse 来遍历整个二叉树。在遍历二叉树的某个节点时,我们首先按照后序遍历的顺序遍历它的左右子树,然后将该节点的值添加到结果列表中。

总结

本文介绍了二叉树的三种遍历算法,包括先序遍历、中序遍历和后序遍历。这些遍历算法是二叉树的基本操作,也是许多高级算法的基础。如果你想要深入了解二叉树的知识,可以参考《算法导论》等经典教材。