📜  从给定数组创建的二叉搜索树的最大高度(1)

📅  最后修改于: 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