LeetCode 110. 平衡二叉树

153 阅读1分钟

题目描述

image.png

思路

左右两个子树的高度差 = 左右两个子树的最大深度差,递归到某个节点时,先判断其左右子树的最大深度差。最大深度用之前的方法来求。

class Solution {
    public boolean isBalanced(TreeNode root) {
        //一直执行isBalanced,中间没有被阻拦,说明之前的节点全部满足条件
        if (root == null) {
            return true;
        }
        int left = maxDepth(root.left);
        int right = maxDepth(root.right);
        int diff = Math.abs(left - right);
        if (diff <= 1) {
            return isBalanced(root.left) && isBalanced(root.right);
        } else {    
            return false;
        }
    }
    
    //求某节点的最大深度
    public int maxDepth(TreeNode node) {
        if (node == null) {
            return 0;
        }
        int left = maxDepth(node.left);
        int right = maxDepth(node.right);
        return Math.max(left, right) + 1;
    }
}