依次计算根节点左右子树的高度,以判断该根节点所引导的树是否符合高度平衡树。
就这样一层一层左右子树去遍历。
核心点在于:
1.先求左右子树高度,再用此高度判断是否为高度平衡树;
2.只要有一个树不满足条件,则层层往上返回-1(非高度平衡树);
3.只要有一个子树不满足条件,返回了-1,则全盘皆输
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isBalanced(self, root: Optional[TreeNode]) -> bool:
if not root: return True
if self.getHeight(root) != -1: return True
else: return False
def getHeight(self, root: 'TreeNode'):
#递归结束条件
if not root: return 0
#单层递归逻辑
#先求左右子树高度
if (left := self.getHeight(root.left) ) == -1: return -1
if (right := self.getHeight(root.right) ) == -1: return -1
#再用高度差判断是否符合条件
if abs(left - right) > 1: return -1
else: return max(left, right) + 1