📜  计算高度为 h 的平衡二叉树(1)

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

平衡二叉树

平衡二叉树(Balanced Binary Tree),顾名思义,就是对于一棵二叉树,左右子树的高度差不能超过 1。保证了平衡二叉树的左右子树的高度相差不多,因此它的查找、插入和删除的时间复杂度都是 O(log n)。

在插入和删除节点时,若不平衡,需要对该节点的不平衡祖先节点进行旋转操作来平衡整棵树。具体旋转操作可参考 AVL 树和红黑树等平衡二叉树的算法。

计算高度为 h 的平衡二叉树

通过平衡二叉树的定义可知,如果想要高度为 h 的平衡二叉树,就需要满足以下条件:

  • 根节点的左右子树的高度相差不超过 1;
  • 左子树的高度为 h/2 或 h/2+1;
  • 右子树的高度为 h/2 或 h/2-1。

因此,我们可以递归地构造这样一棵高度为 h 的平衡二叉树:

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

class Solution:
    def buildTree(self, h: int) -> TreeNode:
        if h == 0:
            return None
        if h == 1:
            return TreeNode()

        left_height = (h - 1) // 2
        right_height = h - 1 - left_height

        root = TreeNode()
        root.left = self.buildTree(left_height)
        root.right = self.buildTree(right_height)

        return root

以上是 Python 代码示例,利用了递归算法,通过构造左右子树高度的方式来构造出这棵平衡二叉树。时间复杂度为 O(h),空间复杂度为 O(h)。

总结

平衡二叉树是一种重要的动态数据结构,它保证了二叉树的平衡性,从而提高了二叉树的查找、插入和删除效率。本文介绍了如何计算高度为 h 的平衡二叉树,并给出了 Python 代码示例。希望对大家理解和应用平衡二叉树有所帮助。