图说各个树的优缺点

前言

  • 数据结构的实现有两种方式,一种是顺序存储,一种是链式存储

顺序存储:使用一片连续的逻辑地址存放数据
链式存储:不用连续地址,使用指针指向下个元素的地址html

  • 经常使用数据结构有:线性表,栈,队列,树,图等等,二叉树是属于这里面的树。

BST(Binary Search Tree)介绍

BST 是一种树,他的特性是
1.子树上全部结点的值均小于或等于它的根结点的值。
2.子树上全部结点的值均大于或等于它的根结点的值。
3.左、右子树也分别为BSTnode

BST的优势:

  • BST 一般是使用链式结构存储实现的,使用顺序存储要么是(Full Binary Tree)或者接近(Full Binary Tree)
  • 顺序存储最大的弊端是必须预先给出数组的存储空间大小插入删除比较麻烦,优势是能够节省空间,查找很快

BST的缺点:

  • 抛开顺序存储和链式存储,BST数据结构自己存在的缺点是,在特定的时候,树的度会一直升高,致使查找效率变低

图一.png

这个时候咱们就有新的树来解决他的缺点就是(AVL Tree)数组

AVL Tree

AVL树,本质上是带了平衡功能的BST,他多了个平衡因子概念
即(每一个结点的左右子树的高度之差的绝对值(平衡因子)最多为1),若是不知足就会旋转来知足这个条件。
上面图一BST 在avl中旋转操做后获得以下,具体怎么旋转的能够在这个网站本身模拟
https://www.cs.usfca.edu/~gal...
图二.png
那么AVL 有没有什么缺点呢?
最大的缺点就是追求完美的平衡致使插入和删除须要大量的平衡计算,这个在插入和删除大的状况致使开销较大,这个时候咱们就想着,有没有一种树,解决BST的缺点,同时又不要大量的计算平衡,因而RB-Tree就被发明了数据结构

RB-Tree 和 AVL 区别

  • RB-Tree 的定义不介绍了,咱们记得这个区别就行

    删除node引发树的不平衡时,最坏状况下,AVL须要维护从被删node到root这条路径上全部node的平衡性,而RB-Tree最多只需3次旋转。网站

    下图是解决图一不平衡RB-Tree的图
    image.pngspa

相关文章
相关标签/搜索