题目描述

给定一个二叉树,判断它是否是高度平衡的二叉树。

本题中,一棵高度平衡二叉树定义为:

一个二叉树每个节点 的左右两个子树的高度差的绝对值不超过1。

示例:

给定二叉树 [3,9,20,null,null,15,7]

    3
   / \
  9  20
    /  \
   15   7
返回 true 。

思路

1.根据平衡二叉树的定义可知,只要有一个结点它的左右子树深度相差超过1便不符合要求。
2.可以额外编写一个函数,用于计算一个结点的左右子树可以达到的深度,若深度差值符合要求,则一直递归下去,否则直接返回false即可。

Java代码实现

    public boolean isBalanced(TreeNode root) {
        if(root != null){
            int leftDepth = treeDepth(root.left);
            int rightDepth = treeDepth(root.right);
            if(Math.abs(leftDepth-rightDepth) <= 1)
                return isBalanced(root.left) && isBalanced(root.right);
            return false;
        }
        return true;
    }

    private int treeDepth(TreeNode root){
        if(root == null)
            return 0;
        return Math.max(treeDepth(root.left),treeDepth(root.right))+1;
    }