二叉树平衡、深度、路径

本文介绍了如何使用递归解决二叉树的平衡判断问题,结合LeetCode 110题,讲解递归思路、边界条件处理及优化,包括自底向上的递归实现,避免超时的深度计算方法,以及时空复杂度分析。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

*一*递归主要考虑问题:
1、返回值

2、一次递归的具体操作

3、边界条件

*二*递归的进阶:

1、利用return语句,实现特殊判断条件(问题的某种情况,可直接判断整体的是和否)下:阻隔中断(起到剪枝的作用)

2、构造自定义类型。可以在return语句中利用自定义类型,实现信息的高度集合,返回语句包含多种信息。

 

一、高度平衡二叉树的判断:
题源:LeetCode 110:https://leetcode-cn.com/problems/balanced-binary-tree/
 

1、工作四天,没碰了。一眼看到有点生疏,后来想法是先写出递归方式,再写出非递归方式。

递归代码:(自底向上)

class Solution {
public:
    int depth(TreeNode* root){
        if(root==NULL) return 0;
        return depth(root->left)>depth(root->right)?depth(root->left)+1:depth(root->right)+1;
    }
    
    bool isBalanced(TreeNode* root) {
        if(root==NULL) return true;
        if(abs(depth(root->left)-depth(root->right))>=2) return false;
        return isBalanced(root->left)&&isBalanced(root->right);
        
    }
};

主要的思路没有问题。由上自下递归实现,但是出现了超时。主要depth()的return语句有问题,应改为:

return max(depth(root->left,root->right)+1;

之前的方法会无端在一次递归中多调用了两次depth()函数。

时空复杂度分析:

2、自上而下

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值