剑指OFFER-平衡二叉树

剑指OFFER-平衡二叉树

Question

输入一棵二叉树,判断该二叉树是否是平衡二叉树。
关键词:二叉树 深度 递归

Solution

这题简直是二叉树深度的更新版,不仅要知道当前深度,还要判断左右深度差不能超过1。虽然既要返回深度也要返回判断,不好写函数的返回值,干脆设置深度为-1时代表否定,那么在递归中要时刻判断是否为-1,是就结束递归。

递归

时间复杂度:O()
空间复杂度:O()

  • Python
class Solution:
    def IsBalanced_Solution(self, pRoot):
        if not pRoot: return True
        
        def depth(p):
            if not p: 
                return 0
            left = depth(p.left)
            if left == -1: 
                return -1
            right = depth(p.right)
            if right == -1: 
                return -1
            return max(left, right)+1 if abs(left-right)<=1 else -1
            

        return depth(pRoot)!= -1
  • C++
class Solution {
public:
    bool IsBalanced_Solution(TreeNode* pRoot) {
        if(!pRoot) return true;
        return depth(pRoot)!=-1;
    }
    int depth(TreeNode* p){
        if(!p) return 0;
        int d_left = depth(p->left);
        if(d_left==-1) return -1;

        int d_right = depth(p->right);
        if(d_right==-1) return -1;
        return abs(d_left - d_right)<=1? max(d_left, d_right)+1:-1;
        
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值