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

📅  最后修改于: 2023-12-03 15:22:01.565000             🧑  作者: Mango

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

二叉搜索树是一种有序的二叉树,它的每个节点包含一个键和一个值,左子树的键值小于该节点的键值,右子树的键值大于该节点的键值。本文将介绍如何从给定数组创建一个二叉搜索树,并找出该二叉搜索树的最大高度。

创建二叉搜索树的算法

创建一个二叉搜索树的算法非常简单,它只需按照以下步骤进行:

  1. 如果给定数组为空,则返回空树。
  2. 找到数组中的中间元素,并将其作为根节点。
  3. 将左子数组中的元素构成左子树,右子数组中的元素构成右子树。
  4. 递归地将左子树和右子树构造出来。

下面是一个用Python实现的创建二叉搜索树的算法:

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

def sorted_array_to_bst(nums):
    if not nums:
        return None
    mid = len(nums) // 2
    root = TreeNode(nums[mid])
    root.left = sorted_array_to_bst(nums[:mid])
    root.right = sorted_array_to_bst(nums[mid+1:])
    return root

算法中的TreeNode表示二叉树的节点,包含一个val值、一个左子节点和一个右子节点。sorted_array_to_bst函数用来创建一个二叉搜索树,它接受一个有序数组作为输入,返回二叉搜索树的根节点。

查找二叉搜索树的最大高度的算法

找出二叉搜索树的最大高度的算法很简单,它只需按照以下步骤进行:

  1. 如果给定树为空,则返回0。
  2. 否则,树的高度等于1+max(左子树的高度,右子树的高度)。
  3. 递归调用左子树和右子树中的每一个节点,找出它们的最大高度。
  4. 求出所有节点的最大高度,并返回。

下面是一个用Python实现的查找二叉搜索树最大高度的算法:

def max_depth(root):
    if not root:
        return 0
    left_depth = max_depth(root.left)
    right_depth = max_depth(root.right)
    return 1 + max(left_depth, right_depth)

该算法中的max_depth函数用来查找二叉搜索树的最大高度。如果给定的树为空,则函数返回0;否则,函数返回1+左子树的最大高度和右子树的最大高度的较大值。

总结

本文介绍了从给定数组创建二叉搜索树的算法和查找二叉搜索树最大高度的算法。这两个算法的时间复杂度都是O(nlogn)。对于给定的数组,我们可以先根据它创建二叉搜索树,然后再求出它的最大高度。