题解 | #判断是不是平衡二叉树#

判断是不是平衡二叉树

http://www.nowcoder.com/practice/8b3b95850edb4115918ecebdf1b4d222

    
    // 定义一个内部类,用于封装每棵子树应该返回给原树
    class returnData {
        boolean isBalanced; // 子树是否是平衡二叉树
        int height; // 子树的高度是多少
        returnData(boolean isBalanced, int height) { // 构造函数
            this.isBalanced = isBalanced;
            this.height = height;
        }
    }
    
    public boolean IsBalanced_Solution(TreeNode root) {
        if (null == root) {
            return true;
        }
        if (null == root.left && null == root.right) {
            return true;
        }
        // 调用递归函数
        returnData rs = IsBalanced(root);
        return rs.isBalanced;
    }
    
    // 判断一棵树是否是平衡二叉树的具体实现
    public returnData IsBalanced(TreeNode root) {
        if (null == root) {
            return new returnData(true, 0); // 如果空节点,那么这棵树是平衡二叉树,高度为 0
        }
        returnData leftData = IsBalanced(root.left); // 获取左子树的信息
        returnData rightData = IsBalanced(root.right); // 获取右子树的信息
        // 只有满足左右子树均是平衡二叉树,且左右子树的高度差小于 2 的情况下,这棵树才是平衡二叉树
        boolean isBalanced = leftData.isBalanced && rightData.isBalanced && Math.abs(leftData.height - rightData.height) < 2;
        return new returnData(isBalanced, Math.max(leftData.height, rightData.height) + 1); // 别忘了,当前树的高度是左右子树中高度最大的那棵树的高度 + 1!!!
    }
}
全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 17:30
点赞 评论 收藏
分享
点赞 评论 收藏
分享
白火同学:大二有这水平很牛了,可以适当对关键信息加粗一点,比如关键技术、性能指标之类的。
点赞 评论 收藏
分享
我是没经验的毕业生,这啥情况啊会不会是hr在刷kpi
JamesGosli...:字节boss属于是群发了,我都快入职字节了,其他部门还在和我boss打招呼
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务