📅  最后修改于: 2023-12-03 15:26:09.386000             🧑  作者: Mango
给定一个二叉树,编写一个函数判断该树是否是平衡二叉树。若该树是平衡二叉树,返回 true
;否则,返回 false
。
平衡二叉树(Balanced Binary Tree),简称 AVL 树,是一种二叉搜索树,其中每个节点的左右子树的高度之差的绝对值不超过 1。
本题可以通过递归的方式来判断二叉树是否平衡。对于每个节点,我们递归计算其左右子树的高度,并比较左右子树的高度差是否小于等于 1,如果小于等于 1 则继续递归判断该节点的左右子树是否平衡。
这里我们需要一个计算树高度的函数,我们可以使用递归计算该节点左右子树的最大高度,然后加上该节点的高度 1。
class Solution:
def isBalanced(self, root: Optional[TreeNode]) -> bool:
def get_height(node: TreeNode) -> int:
if not node:
return 0
left_height = get_height(node.left)
right_height = get_height(node.right)
if abs(left_height - right_height) > 1:
return -1
return max(left_height, right_height) + 1
return get_height(root) != -1
以上是 Python 语言的实现,时间复杂度为 O(N),其中 N 是二叉树的节点数,空间复杂度取决于递归树的深度,在最差情况下可能达到 O(N)。