判断AVL树是否平衡

本文介绍了如何判断一棵AVL树是否平衡。通过递归和非递归两种方法实现,详细阐述了这两种方法的工作原理及时间复杂度分析。递归方法直观但效率较低,非递归方法虽然代码不直观,但能降低时间复杂度。同时,提供了讨论群和学习资源链接。
摘要由CSDN通过智能技术生成

AVL树是高度的平衡二插搜索树,其左子树和右子树的高度之差不超过1(树中的左子树和右子树都是AVL树),维持这个高度之差就要控制它的平衡因子。那么判断一颗AVL树是否平衡就需要判断它的左子树和右子树高度差是否为1,并且子树也遵循这个原则。这里我们可以用递归的方法来判断这颗二叉树是否为平衡二叉树,看他的左右子树之差是否不超过1.代码如下:

bool IsBalance(Node* parent)
{
if (parent == NULL)
return true;

    int rightHight = _Hight(parent->_right);    //右树的高度
    int leftHight = _Hight(parent->_left);        //左树的高度
    return abs(rightHight - leftHight) < 2 && IsBalance(parent->_left) && IsBalance(parent->_right);    //判断左右子树绝对值是否小于2并递归
}

求高度的函数如下:

int _Hight(Node* node)
{
if (node == NULL)
return 0;

    int right = _Hight(node->_right) + 1;
    int left = _Hight(node->_left) + 1;

    return right>left ? right : left;
}

这样的代码很容易理解也能到达求AVL树是否平衡但是由于是递归这个解法的时间复杂度比较高。那么有没有时间复杂度更优的解法呢ÿ

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值