平衡二叉树的判定

修仙公元2022年,一男子试图突破二叉树大关,遇一问题:

给定一个二叉树的根节点,请判断是否为平衡二叉树(左右节点的高度绝对子小于等于1)。

该男子使用层序遍历大法,信誓旦旦的前往考核地点。

结果可想而自:

啊——咚——啃——!!

以失败告终。。。。

最终求助于深山老者,得一秘籍:

 老者问题:何为平衡二叉树?

男子答曰:其左右节点高度相减,绝对值小于等于1着为平衡二叉树、

老者再问:何为二叉树高度?

男子复答曰:一节点左右节点皆为null,高度则为1,再往上一层则+1、

 老者抚理胡须曰:很好!我这里有一本平衡二叉树秘籍,我与你有缘,赠送与你,望发扬光大!

老者说完,化作一缕青烟消失在时空当中————

———————————————————————————————————————————


坑爹书籍之一,就一张纸。。。。。。

 不过聪明的男子看出了其中的奥秘!

首先确定递归的参数:传入节点

确定返回值:每层的高度,int

递归条件:不为空时。

还有一些细节:

这里我们将返回值为-1定为此二叉树不为平衡二叉树。

 public boolean isBalanced(TreeNode root) {
        return dfs(root)==-1?false:true;
    }
    int dfs(TreeNode root){
        if(root==null){
            return 0;
        }
        int l=dfs(root.left);
        if(l==-1){
            return -1;
        }
        int r=dfs(root.right);
        if(r==-1){
            return -1;
        }
        return Math.abs(l-r)>1?-1:1+Math.max(l,r);
    }

 当左右节点任何一个节点返回-1时,就说明下面已经不满足平衡二叉树的定义了,就可以继续返回-1了。

第二点:下一层的高度是等于本层左右节点最大值+1.这里大家画一个二叉树,从下往上画一遍就懂了。

男子一脸骄傲的样子,兴冲冲跑去测试,过了!

结果门后还有门,无穷无尽,男子当场暴毙!卒!

                                                                                                                                结章——

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值