返回值:
当节点root 左 / 右子树的深度差≤1 :则返回当前子树的深度,即节点 root 的左 / 右子树的深度最大值 +1( max(left, right) + 1 );
当节点root 左 / 右子树的深度差 > 2 :则返回 -1 ,代表 此子树不是平衡树 。
终止条件:
当 root 为空:说明越过叶节点,因此返回高度 0;
当左(右)子树深度为 -1 :代表此树的 左(右)子树 不是平衡树,因此剪枝,直接返回 -1 ;
class Solution:
def isBalanced(self, root: TreeNode) -> bool:
def recur(root):
if not root: return 0
left = recur(root.left)
if left == -1: return -1
right = recur(root.right)
if right == -1: return -1
return max(left, right) + 1 if abs(left - right) <= 1 else -1
return recur(root) != -1