刷题笔记(21)--平衡二叉树

Posted HardyDragon_CC

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了刷题笔记(21)--平衡二叉树相关的知识,希望对你有一定的参考价值。

平衡二叉树

在这里插入图片描述

技巧:递归返回值可以表示两种状态。

class Solution {

    // 递归辅助函数,其返回值有两种,如果树平衡返回的是树的深度(左右子树取最大值);如果不平衡,返回 -1;
    private int depthTree(TreeNode root){
        if(root == null) return 0;
        int ld = depthTree(root.left);
        int rd = depthTree(root.right);
        // 左右子树高度差大于1不平衡,且遇到子树不平衡,整个树也不平衡。
        if(ld == -1 || rd == -1 || Math.abs(ld - rd) > 1){
            return -1;
        }
        // 返回数的深度 左右子树取最大值,再加上其本身
        return Math.max(ld,rd) + 1;
    }

    public boolean isBalanced(TreeNode root) {
        return depthTree(root) == -1 ? false : true;
    }

}

补充:递归计算二叉树高度

// 递归函数返回树的深度
private int depthTree(TreeNode root){
    return root == null ? 0 : Math.max(depthTree(root.left) , depthTree(root.right)) + 1;
}

以上是关于刷题笔记(21)--平衡二叉树的主要内容,如果未能解决你的问题,请参考以下文章

刷题19:平衡二叉树

二叉树刷题篇平衡二叉树与二叉树的所有路径

Leetcode刷题Python110. 平衡二叉树

Leetcode刷题100天—110.平衡二叉树(AVL树)—day05

算法笔记-7:平衡二叉树(代码篇)

LeetCode刷题日记精选例题(代码+链接)