当前位置:实例文章 » 其他实例» [文章]【算法与数据结构】110、LeetCode平衡二叉树

【算法与数据结构】110、LeetCode平衡二叉树

发布人:shili8 发布时间:2025-02-22 05:47 阅读次数:0

**平衡二叉树**

平衡二叉树是一种特殊的二叉树,它的每个子树都是平衡的。也就是说,任意一个节点的左子树和右子树的高度差不超过1。

**定义**

给定一个二叉树,每个节点都有一个值,以及指向左右孩子的两个指针。我们可以用以下方法来判断一个二叉树是否是平衡的:

* 如果根节点为null,则该树是平衡的。
* 如果根节点的左子树或右子树不平衡,则该树是不平衡的。
* 否则,递归检查左右子树是否平衡。

**示例**

假设我们有一个二叉树:

3 / 
920 / 
157


这个二叉树是平衡的,因为每个子树的高度差不超过1。

**解决方案**

要判断一个二叉树是否是平衡的,我们可以使用以下方法:

* 首先,定义一个函数来计算一个节点的高度。
* 然后,定义一个函数来检查一个节点是否是平衡的。
* 最后,递归检查整个树。

**代码**

class TreeNode:
 def __init__(self, x):
 self.val = x self.left = None self.right = Nonedef isBalanced(root: TreeNode) -> bool:
 """
 :type root: TreeNode :rtype: bool """
 # 如果根节点为null,则该树是平衡的。
 if not root:
 return True # 计算左子树和右子树的高度差。
 left_height = get_height(root.left)
 right_height = get_height(root.right)
 # 如果左右子树的高度差超过1,则该树是不平衡的。
 if abs(left_height - right_height) >1:
 return False # 递归检查左子树和右子树是否平衡。
 return isBalanced(root.left) and isBalanced(root.right)

def get_height(root: TreeNode) -> int:
 """
 :type root: TreeNode :rtype: int """
 # 如果根节点为null,则高度为0。
 if not root:
 return0 # 递归计算左子树和右子树的高度,然后返回最大值加1。
 return max(get_height(root.left), get_height(root.right)) +1# 测试root = TreeNode(3)
root.left = TreeNode(9)
root.right = TreeNode(20)
root.right.left = TreeNode(15)
root.right.right = TreeNode(7)

print(isBalanced(root)) # True


**注释**

* `isBalanced`函数用于判断一个二叉树是否是平衡的。
* `get_height`函数用于计算一个节点的高度。
* 递归检查整个树以确保它是平衡的。

**总结**

在本文中,我们讨论了平衡二叉树的定义和解决方案。我们使用递归方法来检查整个树是否是平衡的,并提供了示例代码和注释。

其他信息

其他资源

Top