📅  最后修改于: 2023-12-03 15:12:43.320000             🧑  作者: Mango
一个二叉树被称为高度平衡的二叉树,当且仅当每个节点的左右子树高度差不超过1。给定一个二叉树,确定它是否高度平衡。
def is_balanced(self, root: TreeNode) -> bool:
root
:二叉树的根。一个树节点类型的实例。bool
:如果二叉树是高度平衡的,则返回True,否则返回False。 3
/ \
9 20
/ \
15 7
True
1
/ \
2 2
/ \
3 3
/ \
4 4
False
本题的关键在于确定一个二叉树是否高度平衡,具体实现方法可以采用递归、栈等数据结构。
def is_balanced(self, root: TreeNode) -> bool:
def check(root):
if not root:
return 0
left = check(root.left)
if left == -1:
return -1
right = check(root.right)
if right == -1:
return -1
return max(left, right) + 1 if abs(left - right) <= 1 else -1
return check(root) != -1
解释
在 check
函数中,首先判断当前节点是否为Null,如果是,则返回0,表示该节点的高度为0。然后对当前节点的左右子树递归调用 check
函数,得到左右子树节点的高度,如果左右子树高度差大于1,则返回 -1,表示该二叉树不是高度平衡的。最后,如果当前子树是高度平衡的,则返回该子树的高度即可。
在 is_balanced
函数中,通过调用 check
函数来判断给定的二叉树是否高度平衡。如果 check
函数返回的结果不是 -1,则说明给定的二叉树是高度平衡的。如果返回 -1,则说明给定的二叉树不是高度平衡的。
递归的时间复杂度为 O(N),其中 N 是二叉树的节点数。
本题可以通过递归,栈等数据结构实现,采用递归方法比较简单,时间复杂度也相对较小。