AVL树的理解以及编写(C++)

AVL树

AVL树的定义

AVL树是一种高度平衡的二叉搜索树,对每一个节点而言它的左子树右子树高度差最多为1。一棵有n个节点的AVL树高度为O(lgn).

AVL树基本操作

AVL树基本操作和一棵普通二叉树是一样的。一棵普通二叉树实现如下
二叉搜索树
而一棵AVL树满足二叉树的所有性质。所以譬如在寻找最大值(Maximum)、最小值(Minimum)时这类函数没有任何改动。
然而,从AVL的描述种我们可以看出,AVL树的节点比起普通二叉树,多了一个h值(节点高度)。所以,我们需要一个可以在我们进行了改变树高度的操作之后,对树高进行维护的函数。

InsertHeightFixup

InsertHeightFixup应该是一个通用函数,最初我是为Insert操作设计的;后来逐渐发现,所有改变高度的操作都可以由这个函数进行高度维护。
假设我们在一棵AVL树上插入一个节点,那么这个节点一定在树的最低端(正如同一棵普通的二叉搜索树);也就是,这个节点高度为1。那么,可能被这个节点影响高度的,应该是,从这个节点到树根路径上的所有点。
并且,一个节点的高度应该是他的左节点右节点中高度的最大值+1,既x.h=max(x.left.h,x.right.h)+1。所以,在插入一个节点后,为了维护

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值