📌  相关文章
📜  从 BST 构建二叉树,使其级别顺序遍历打印排序数据(1)

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

从 BST 构建二叉树,使其级别顺序遍历打印排序数据

二叉搜索树(BST)是一种常用的数据结构,它具有以下性质:

  • 左子树上所有节点的值都小于根节点的值;
  • 右子树上所有节点的值都大于根节点的值;
  • 左右子树也分别是二叉搜索树。

在本文中,我们将介绍如何从给定的 BST 构建一棵二叉树,并使其按照层级顺序遍历打印排序数据。

构建二叉树

要从 BST 构建二叉树,我们需要遍历 BST 中的每个节点,并将其插入到二叉树中。由于 BST 中的每个节点的值都已经排好序,因此我们可以采用递归的方法进行构建。

下面是一个示例:

class TreeNode:
    def __init__(self, val=0, left=None, right=None):
        self.val = val
        self.left = left
        self.right = right

class Solution:
    def sortedArrayToBST(self, nums: List[int]) -> TreeNode:
        if not nums:
            return None
        mid = len(nums) // 2
        root = TreeNode(nums[mid])
        root.left = self.sortedArrayToBST(nums[:mid])
        root.right = self.sortedArrayToBST(nums[mid+1:])
        return root

以上代码中,我们定义了一个 TreeNode 类存储二叉树节点的信息,并定义了一个 Solution 类,在其中编写了 sortedArrayToBST 方法,用于从 BST 中构建二叉树。该方法接受一个有序数组作为输入,返回一棵二叉树。

我们首先判断数组是否为空,如果为空,则返回 None,否则计算数组的中间位置,将其作为根节点的值。然后递归地对左半部分和右半部分分别调用 sortedArrayToBST 方法,构建左子树和右子树,并将它们分别赋给根节点的左右子节点。最后返回根节点。

使其按照层级顺序遍历打印排序数据

要使二叉树按照层级顺序遍历打印排序数据,我们可以使用队列作为辅助数据结构。下面是一个示例:

def levelOrder(root: TreeNode) -> List[List[int]]:
    if not root:
        return []
    res = []
    q = []
    q.append(root)
    while q:
        level = []
        n = len(q)
        for i in range(n):
            node = q.pop(0)
            level.append(node.val)
            if node.left:
                q.append(node.left)
            if node.right:
                q.append(node.right)
        res.append(level)
    return res

以上代码中,我们定义了一个 levelOrder 方法,用于按照层级顺序遍历打印排序数据。该方法接受一个根节点作为输入,返回一个列表,其中包含了每一层节点的值。

我们首先判断根节点是否为空,如果为空,则返回一个空列表。否则,我们定义一个空列表 res 存储遍历结果,一个队列 q 存储待遍历的节点。我们将根节点入队,并进入循环。

在循环中,我们定义一个空列表 level,用于存储当前层级的节点值。然后获取队列 q 的长度,将队列中的前 n 个节点依次出队,并将它们的值添加到 level 中。如果某个节点有左子节点,则将其左子节点加入队列 q 中;如果某个节点有右子节点,则将其右子节点加入队列 q 中。

完成一轮循环后,我们将 level 添加到 res 中,并循环下一轮。当队列为空时,遍历结束,我们返回 res 即可。

总结

以上就是从 BST 构建二叉树,使其级别顺序遍历打印排序数据的全部内容。通过本文的介绍,我们了解了如何从 BST 中构建二叉树,并使其按照层级顺序遍历打印排序数据。