解题思路:
要求每个节点的左右子树高度差不大于1
由于每个节点高度由它的左右子树的高度决定,那么可利用递归先从最底层开始计算高度,
若节点无子节点返回0,计算高度
若有结点的左右子树高度差大于1,说明其不是平衡的,可返回-1代表不平衡,
一旦出现了 -1 就说明不平衡,那就从出现-1的地方到根节点 高度都为-1
若左右子树高度差都小于等于1,那就取该节点正常高度,继续计算,
def height(root):
if not root:return 0
leftheght = height(root.left)
rightheght = height(root.right)
if leftheght == -1 or rightheght == -1 or abs(leftheght-rightheght)>1:
'''
左右高度差大于1,或左右子树中存在不平衡(-1),往上就都不平
'''
return -1
else :
return max(leftheght,rightheght)+1 #否则正常计算高度
return height(root) >= 0