60.平衡二叉树

输入一棵二叉树的根结点,判断该树是不是平衡二叉树。

如果某二叉树中任意结点的左右子树的深度相差不超过 1,那么它就是一棵平衡二叉树。

注意:

  • 规定空树也是一棵平衡二叉树。

数据范围:

树中节点数量 [0,500]。

样例:

输入:二叉树[5,7,11,null,null,12,9,null,null,null,null]如下所示,
image
输出:true

代码:

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    //全局变量,用于记录树是否平衡
    boolean res = true;
    public boolean isBalanced(TreeNode root) {
        //深度优先搜索
        dfs(root);
        //返回结果
        return res;
    }
    public int dfs(TreeNode root){
        //递归终止条件:空节点高度为0
        if(root == null)return 0;
        //递归计算左子树高度
        int l = dfs(root.left);
        //递归计算右子树高度
        int r = dfs(root.right);
        //检查当前子树是否平衡(左右高度差不超过1)
        //不平衡则更新结果
        if(Math.abs(l-r)>1)res = false;
         //返回当前子树的高度(左右子树最大高度+1)
        return Math.max(l,r)+1;
    }
}
posted @ 2025-05-30 14:48  回忆、少年  阅读(8)  评论(0)    收藏  举报