110 平衡二叉树

题目描述:

 

图片来源于官方描述。

思路:

// 自己没做出来,看了官方解法。本质上类似树的后序遍历,自底向上来进行判断,采用递归。官方还有解法自顶向下,这样会额外判断,不采纳。

    // 核心思想:若一个节点的左子节点是平衡树,右子节点也是。那么我们判断当前节点是不是,当前节点是的前提是左右子节点高度相差小于2。因此我们必须来记录每个节点的树的高度,自己最初想直接在左右子树判断时返回Boolean型,但是这样的话若左右为true,就无法判断当前的true or falsel了。因为左右为true,当前也可以为false,这就必须要求返回各个子节点的树的高度。 同时,若当前已经左边为false,直接一路返回-1即可,无需后续判断了。

/**
 * Definition for a binary tree node.
 * public class TreeNode {
 *     int val;
 *     TreeNode left;
 *     TreeNode right;
 *     TreeNode(int x) { val = x; }
 * }
 */
class Solution {
    // 自己没做出来,看了官方解法。本质上类似树的后序遍历,自底向上来进行判断。官方还有解法自顶向下,这样会额外判断,不采纳。
    // 核心思想:若一个节点的左子节点是平衡树,右子节点也是。那么我们判断当前节点是不是,当前节点是的前提是左右子节点高度相差小于2。因此我们必须来记录每个节点的树的高度,自己最初想直接在左右子树判断时返回Boolean型,但是这样的话若左右为true,就无法判断当前的true or falsel了。因为左右为true,当前也可以为false,这就必须要求返回各个子节点的树的高度。 同时,若当前已经左边为false,直接一路返回-1即可,无需后续判断了。
    public boolean isBalanced(TreeNode root) {
            return height(root)>=0;

        
    }

    public int height(TreeNode root){
            if(root==null){
                return 0;
            }

            int lHeight=height(root.left);
            if(lHeight==-1){
                return -1;
            }
            int rHeight=height(root.right);
            if(rHeight==-1||Math.abs(lHeight-rHeight)>1){
                return-1;
            }

            return Math.max(lHeight,rHeight)+1;
        }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值