再回首数据结构—AVL树(一)

栏目: 编程工具 · 发布时间: 4年前

内容简介:前面所讲的二叉搜索树有个比较严重致命的问题就是极端情况下当数据以排序好的顺序创建搜索树此时二叉搜索树将退化为链表结构因此性能也大幅度下降,因此为了解决此问题我们下面要介绍的与二叉搜索树非常类似的结构就诞生了;AVL(Adelson-Velskii and Landis)树,名字取自其发明者 G.M. Adelson-Velsky 和 E.M. Landis的首字母,AVL树是一棵特殊的二叉搜索树它与普通二叉搜索树最主要的区别就是其能够使二叉搜索树维持其左右节点的平衡;

前面所讲的二叉搜索树有个比较严重致命的问题就是极端情况下当数据以 排序 好的顺序创建搜索树此时二叉搜索树将退化为链表结构因此性能也大幅度下降,因此为了解决此问题我们下面要介绍的与二叉搜索树非常类似的结构就诞生了;

再回首数据结构—AVL树(一)

AVL(Adelson-Velskii and Landis)树,名字取自其发明者 G.M. Adelson-Velsky 和 E.M. Landis的首字母,AVL树是一棵特殊的二叉搜索树它与普通二叉搜索树最主要的区别就是其能够使二叉搜索树维持其左右节点的平衡;

AVL树:其任意一个节点左子树与右子树高度差不超过1,由于此特征因此需要在AVL增删节点时维护其左右节点使该树满足该特性(左右节点平衡);

再回首数据结构—AVL树(一)

此AVL树中节点2节点高度都为2,节点1与3节点高度都为1;节点高度为左右子树中最大的节点高度+1;

AVL树实现关键

1、标注其节点高度

2、计算节点平衡因子

3、维护其节点满足左右节点高度不超过1

AVL树的实现

1、AVL树定义

根据AVL树的特性先定义该数据类型的结构;

type AVL struct {
   root    *AVLNode
   size    int
   compare Comparable
 }
 type AVLNode struct {
   e      interface{}
   left   *AVLNode
   right  *AVLNode
   height int
 }

AVL:为定义的AVL树自定义对象

AVLNode:为树中每个节点的节点自定义对象

compare:为定义的用于树中节点元素进行数据对比的对象

size:AVL树的元素个数

root:树的根节点

e:节点元素值

left:左子树

right:右子树

height:节点高度

AVL树与二叉搜索树一样所有很多操作都可用递归来实现,比如元素的添加、删除、查找等;

可以说AVL树为二叉搜索树的升级版本所以并不会像出现二叉搜索树一样出现退化为O(n)时间复杂度的情况,与二叉搜索树一样通过中序遍历可得到排序好的数据,二叉搜索树的搜索、插入、删除时间复杂度为O(log(n)),n为树的深度,这里只是简单的介绍了AVL树,后面会有AVL树实现的相关介绍;


以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

深入理解并行编程

深入理解并行编程

[美] Paul E.Mckenney(保罗·E·麦肯尼) / 谢宝友 鲁阳 / 电子工业出版社 / 2017-7-1 / 129

《深入理解并行编程》首先以霍金提出的两个理论物理限制为引子,解释了多核并行计算兴起的原因,并从硬件的角度阐述并行编程的难题。接着,《深入理解并行编程》以常见的计数器为例,探讨其不同的实现方法及适用场景。在这些实现方法中,除了介绍常见的锁以外,《深入理解并行编程》还重点介绍了RCU的使用及其原理,以及实现RCU的基础:内存屏障。最后,《深入理解并行编程》还介绍了并行软件的验证,以及并行实时计算等内容......一起来看看 《深入理解并行编程》 这本书的介绍吧!

CSS 压缩/解压工具
CSS 压缩/解压工具

在线压缩/解压 CSS 代码

MD5 加密
MD5 加密

MD5 加密工具

RGB HSV 转换
RGB HSV 转换

RGB HSV 互转工具