📜  检查给定的二叉树是否像红黑树一样高度平衡(1)

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

检查二叉树是否像红黑树一样高度平衡

红黑树简介

红黑树是一种自平衡二叉查找树,在操作中自动保持树的平衡。它是一种复杂的数据结构,但其自平衡的特性使得它保持了较快的查询效率。

红黑树是一种具有以下特性的二叉树:

  1. 节点要么是黑色,要么是红色;
  2. 根节点是黑色;
  3. 叶子节点(NULL节点)是黑色;
  4. 若一个节点是红色,则它的两个子节点都是黑色;
  5. 对于每个节点,从该节点到其所有后代节点的简单路径上,均包含相同数目的黑色节点。
二叉树的高度平衡

如果一棵二叉树中所有的非叶子节点的左右子树的高度差都小于等于1,则该树被称为高度平衡的二叉树。

高度平衡的二叉树可以保证在最坏情况下的查询时间复杂度为O(log n)。

检查二叉树是否像红黑树一样高度平衡

我们可以使用递归的方式来检查一棵二叉树是否像红黑树一样高度平衡。

首先我们需要编写一个函数来获取一棵二叉树的高度:

def getHeight(node):
    if not node:
        return 0
    return max(getHeight(node.left), getHeight(node.right)) + 1

这个函数会返回一棵树的高度。

接下来,我们需要编写一个函数来检查一棵二叉树是否高度平衡:

def isBalanced(node):
    if not node:
        return True
    leftHeight = getHeight(node.left)
    rightHeight = getHeight(node.right)
    if abs(leftHeight - rightHeight) <= 1 and isBalanced(node.left) and isBalanced(node.right):
        return True
    return False

这个函数会递归检查二叉树的每个节点,如果它的左右子树的高度差小于等于1,并且它的左右子树都是高度平衡的二叉树,那么它就是一棵高度平衡的二叉树。

我们可以使用这个函数来检查一棵二叉树是否像红黑树一样高度平衡。

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


def getHeight(node):
    if not node:
        return 0
    return max(getHeight(node.left), getHeight(node.right)) + 1


def isBalanced(node):
    if not node:
        return True
    leftHeight = getHeight(node.left)
    rightHeight = getHeight(node.right)
    if abs(leftHeight - rightHeight) <= 1 and isBalanced(node.left) and isBalanced(node.right):
        return True
    return False


# Test
root = TreeNode(1)
root.left = TreeNode(2)
root.right = TreeNode(3)
root.left.left = TreeNode(4)
root.left.right = TreeNode(5)
root.right.left = TreeNode(6)
root.right.right = TreeNode(7)

print(isBalanced(root))  # True

以上代码实现了一个简单的二叉树,并使用 isBalanced() 函数进行了高度平衡检查。