📅  最后修改于: 2023-12-03 14:49:16.937000             🧑  作者: Mango
二叉搜索树(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 中构建二叉树,并使其按照层级顺序遍历打印排序数据。