📅  最后修改于: 2023-12-03 14:58:30.507000             🧑  作者: Mango
该题考查了二叉搜索树的性质以及其中序遍历的应用。下面为该题的详细描述。
给定一个大小为 $n$ 的有序整数数组 $A$,需要构建一个高度平衡的二叉搜索树(BST)以支持快速查找操作。假定 $n$ 是偶数,并且每个数组元素的值都不同。实现一个如下所示的函数:
def build_bst(A):
"""
A: List[int] -- 有序数组
return: TreeNode -- 构建好的二叉搜索树根节点
"""
pass
函数返回构建好的二叉搜索树的根节点。你需要使用 $O(n)$ 的时间复杂度和恒定的空间复杂度实现该函数。
输入共一行,为一个空格分隔的有序整数数组 $A$。其中 $2 \leq n \leq 10^3$,数组元素的值范围为 $1 \sim 10^4$。
输出共一行,为二叉搜索树的中序遍历结果,节点之间以空格分隔。
1 2 3 4 5 6 7 8
1 2 3 4 5 6 7 8
该输入对应的输出为高度平衡的二叉搜索树,中序遍历结果即为数组 $A$ 的所有元素。
对于一个有序数组 $A$,二叉搜索树的根节点应当是数组的中间元素 $mid$。这一点可以通过找到数组的中位数来实现,中位数应该是$A[n/2-1]$。
mid = A[n // 2 - 1]
root = TreeNode(mid)
左子树和右子树的生成也可以采用递归的方式来实现。为保证高度平衡,递归的处理方式应该是二分的。
# 左子树
root.left = build_bst(A[:n // 2 - 1])
# 右子树
root.right = build_bst(A[n // 2:])
最后返回根节点即可。
下面是完整的 Python 实现代码,其中注释部分是解释和代码片段。
class TreeNode:
def __init__(self, x):
self.val = x
self.left = None
self.right = None
def build_bst(A):
"""
A: List[int] -- 有序数组
return: TreeNode -- 构建好的二叉搜索树根节点
"""
n = len(A)
# 处理根节点
mid = A[n // 2 - 1]
root = TreeNode(mid)
# 处理左子树
if n > 2:
root.left = build_bst(A[:n // 2 - 1])
# 处理右子树
if n > 1:
root.right = build_bst(A[n // 2:])
return root
本题考查了二叉搜索树的性质以及其中序遍历的应用。具体来说,
注意代码要特别注意边界处理,避免数组下标越界等情况的发生。