题目描述
给定一颗二叉树,判断它是不是高度平衡的二叉树。一颗高度平衡二叉树定义为:一个二叉树的每个节点的左右子树的高度差的绝对值不超过1。

示例1
给定二叉树[3,9,20,null,null,15,7],返回True
给定二叉树[1,2,2,3,3,null,null,4,4],返回False

代码实现

定义树节点
class TreeNode:
    def __init__(self,x):
        self.val = x
        self.left = None
        self.right = None

重构二叉树
def buildTree(nums , i):
    if i >= len(nums) or nums[i] == 'null':
        return None
    root = TreeNode(nums[i])
    root.left = buildTree(nums , 2*i+1)
    root.right = buildTree(nums , 2*i+1)
    return root

class Solution:
    def isBalanced(self,root: TreeNode) -> bool:
        if not root:
            return True
        index1 = abs(self.tree_depth(root.left) - self.tree_depth(root.right)) <= 1
        index2  = self.isBalanced(root.left)
        index3 = self.isBalanced(root.right)
        return index1 and index2 and index3

    def tree_depth(self,node) -> int:
        left_depth = float("-inf")
        right_depth = float("-inf")
        if not node:
            return 0
        if not (node.left or node.right):
            return 1 
        if node.left:
            left_depth = max(self.tree_depth(node.left),left_depth)
        if node.right:
            right_depth = max(self.tree_depth(node.right),right_depth)
        return max(left_depth , right_depth) + 1