题目
具体代码
python:
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
def getM(root: TreeNode) -> int:
if not root:
return 0
left = getM(root.left)
right = getM(root.right)
if left==-1 or right==-1 or abs(left-right)>1:
return -1
return max(left, right)+1
return getM(root)>=0
总结
我一开始对平衡二叉树的理解是:对所有的叶子节点而言,最短的和最长的节点相差不能超过1。
但是仔细看题,是每个节点的左右两个子树的高度差的绝对值不能超过1。
以一个二叉树为例:
[1,2,3,4,5,6,null,8]:
如果是以我最开始的想法,那么
3节点的右子节点与4节点的左子节点之间相差2,该树不是平衡二叉树
,
但是实际上它是,因为:
对于节点1
,其左子树的长度为4
,右子树的长度为3
,符合;
对于节点2
,其左子树的长度为2
,右子树的长度为1
,符合;
对于节点3
,其左子树的长度为1
,右子树的长度为0
,符合;
对于节点4
,其左子树的长度为1
,右子树的长度为0
,符合;
对于节点5、6
,其左子树、右子树的长度均为0
,符合。
所以它是平衡二叉树!