LeetCode 110. 平衡二叉树

高度与深度的区别:

  • 首先从高度和深度的定义上,高度和深度是相反的表示,深度是从上到下数的,而高度是从下往上数的。如下图,根结点开始算深度,和以4为开始的叶子节点开始算高度。
  • 根节点是没有父节点的节点。根结点的深度为1。
  • 虽然树的深度和高度一样,但是具体到树的某个节点,其深度和高度是不一样的。
  • 虽然定义不同,有时候深度高度不同,但是它们的目标值有时候处理问题时是相同的,比如求下图1的左子树的高度,就可以用深度来求,具体情况还需要多研究题总结。

在这里插入图片描述

题目链接 110. 平衡二叉树
如果是单纯的求一个树的高度,用迭代法是ok的。但是这里要求多个节点的高度,再用迭代法就较为复杂了。所以本题使用递归法来解决,先判断左右子树是否是平衡二叉树,再判断整个树本身是否满足平衡二叉树,若满足则求得当前节点的高度,并回溯到上一次递归中。具体细节见代码注释。

递归解法:

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

    int getHeight(TreeNode root){
        if(root == null) return 0;

        int result = 0;

        int leftheight = getHeight(root.left);//判断子树是否满足平衡二叉树
        if(leftheight == -1) return -1; //如果子树不满足,则整个树也不满足
        int rightheight = getHeight(root.right);
        if(rightheight == -1) return -1;

        if(Math.abs(leftheight-rightheight)>1) result = -1;
        else result = Math.max(leftheight,rightheight) + 1;//加上根的高度1,通过这里计算高度的
        return result;
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

疯狂java杰尼龟

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值