剑指offer之平衡二叉树

本文介绍了一种判断二叉树是否为平衡二叉树的算法。平衡二叉树是一种特殊的二叉搜索树,其左右子树的高度差不超过1。文章详细解释了平衡二叉树的概念,提出了一种递归算法,通过比较左右子树的高度来判断整棵树是否满足平衡条件。

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

1.题目描述

输入一棵二叉树,判断该二叉树是否是平衡二叉树。

2.问题分析

什么是平衡二叉树?平衡二叉搜索树(Self-balancing binary searchtree)又被称为AVL树(有别于AVL算法),且具有以下性质:它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

根据平衡二叉树的定义,我们可以知道,平衡二叉树也是一个递归定义。我们可以借鉴二叉树的深度来判断是否是平衡二叉树。
每次我们得到左右子树高度的时候,都进行高度差判断。如果有一个子树不满足要求,之后都返回一个标志值,说明该树不是平衡二叉树。

3.源代码

int getDeep(TreeNode* pRoot)
{
    if(pRoot == NULL)
        return 0;
    int left = getDeep(pRoot->left);
    //如果左树非平衡二叉树,直接返回结果
    if(left == -1)
        return -1;
    int right = getDeep(pRoot->right);
    //如果右树非平衡二叉树,直接返回结果
    if(right == -1)
        return -1;
    //判断左右子树是否满足平衡二叉树要求,不满足就返回-1,反之返回平衡二叉树高度   
    return std::abs(left - right) > 1 ? -1 : max(left, right) + 1;
}
bool IsBalanced_Solution(TreeNode* pRoot) {
	//如果pRoot为空,因为返回值是0,所以也是平衡二叉树
    return getDeep(pRoot) != -1;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值