📅  最后修改于: 2023-12-03 14:54:56.089000             🧑  作者: Mango
在计算机科学中,二叉树是一种重要的非线性数据结构,它由许多节点组成,每个节点最多有两个子节点,且每个子节点都是独立的二叉树。二叉树有许多重要的应用,例如在操作系统的进程调度、编译器的表达式求值和数据库系统的索引算法中都有广泛的应用。
问题 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
来遍历整个二叉树。在遍历二叉树的某个节点时,我们首先按照后序遍历的顺序遍历它的左右子树,然后将该节点的值添加到结果列表中。
本文介绍了二叉树的三种遍历算法,包括先序遍历、中序遍历和后序遍历。这些遍历算法是二叉树的基本操作,也是许多高级算法的基础。如果你想要深入了解二叉树的知识,可以参考《算法导论》等经典教材。