📅  最后修改于: 2023-12-03 15:06:38.027000             🧑  作者: Mango
二叉搜索树(Binary Search Tree)是一种特殊的二叉树,它的左子树所有节点的值都小于根节点的值,右子树所有节点的值都大于根节点的值。由于这个特性,二叉搜索树可以很方便地进行查找、插入和删除操作。本文将讨论如何从给定数组创建一个二叉搜索树,并求出它的最大高度。
创建二叉搜索树的过程可以采用递归的方式。我们从数组中选取中间元素作为根节点,将数组分成左右两个子数组,分别递归构建左右子树。
class Node:
def __init__(self, data=None):
self.data = data
self.left = None
self.right = None
def build_bst(arr):
if len(arr) == 0:
return None
mid = len(arr) // 2
root = Node(arr[mid])
root.left = build_bst(arr[:mid])
root.right = build_bst(arr[mid + 1:])
return root
在上述代码中,我们首先判断数组是否为空,如果为空则返回空节点。如果数组不为空,我们取中间元素作为根节点,创建一个节点对象,并递归调用 build_bst
函数构建左右子树,最后返回根节点。
求二叉搜索树的最大高度可以采用递归的方式。对于每一个节点,我们求它的左子树和右子树的最大高度,然后取两者中的最大值再加 1,作为节点的高度。递归地对左右子树进行求解,最终得到整棵树的最大高度。
def max_height(root):
if root is None:
return 0
left_height = max_height(root.left)
right_height = max_height(root.right)
return max(left_height, right_height) + 1
在上述代码中,我们首先判断节点是否为空,如果为空则返回 0。如果节点不为空,我们采用递归的方式分别求左子树和右子树的最大高度,并取两者中的最大值再加 1,作为节点的高度。
我们可以使用下面的代码来测试我们的代码是否正确。
arr = [1, 2, 3, 4, 5, 6, 7]
root = build_bst(arr)
print(max_height(root)) # output: 3
在上述代码中,我们创建一个给定的数组 arr
,然后从中创建一棵二叉搜索树,并求出它的最大高度。对于给定的数组 [1, 2, 3, 4, 5, 6, 7]
,我们得到的结果应该是 3
。