各种二叉树结构、哈希表

平衡二叉树(AVL)

可以是空树。假如不是空树,任何一个结点的左子树与右子树都是平衡二叉树,并且高度之差的绝对值不超过 1。

 

完全二叉树

若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。

 

二叉查找树

  1. 左子树上所有结点的值均小于或等于它的根结点的值。
  2. 右子树上所有结点的值均大于或等于它的根结点的值。
  3. 左、右子树也分别为二叉排序树。

最大查找的次数等于二叉树的高度。

 

红黑树

红黑树是一种含有红黑结点并能自平衡二叉查找树。它必须满足下面性质:

  • 性质1:每个节点要么是黑色,要么是红色。
  • 性质2:根节点是黑色。
  • 性质3:每个叶子节点都是黑色的空节点(NIL节点)。
  • 性质4:每个红色节点的两个子节点都是黑色。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
  • 性质5:任意一结点到每个叶子结点的路径都包含数量相同的黑结点。

红黑树从根节点到叶子节点的最长路径不会超过最短路径的2倍。

当插入或删除节点时,红黑树的规格可能会被破坏,我们需要做出一些调整,来保证还是红黑树。调整有两种方法,变色和旋转,旋转又分为左旋和右旋。

  • 变色:把红色节点变为黑色,或者把黑色节点变为红色。
  • 左旋:逆时针旋转红黑树的两个节点,使得父节点被自己的右孩子取代,而自己成为自己的左孩子。
  • 右旋:顺时针旋转红黑树的两个节点,使得父节点被自己的左孩子取代,而自己成为自己的右孩子。

图红黑树:

图左旋:                          :图右旋

红黑树的应用:jdk集合中,TreeMap和TreeSet的底层是使用红黑树实现的,jdk1.8版本之后,HashMap的底层实现是 数组 + 链表/红黑树 实现的。

堆是用数组实现的二叉树,是一种特殊的完全二叉树,当且仅当满足所有节点的值总是不大于或不小于其父节点的值的完全二叉树被称之为堆。有大顶堆和小顶堆。

 

B树

B树是平衡的多路搜索树,平衡意味着左子树和右子树相差不超过1,B树的两个明显特点,一是树内的每个节点都存储数据,二是叶子节点之间无指针相邻。因为叶子节点之间没有指针,所以B树查找存在回溯问题,就是当要查找大于某个数的所有数时,要再次回到上一个父节点,再找右子树,然后继续向上查找,跨层访问,效率太慢,所以就有了B+树。

B树的两个明显特点

  1. 树内的每个节点都存储数据
  2. 叶子节点之间无指针相邻

preview

 

B+树

B+树是有B树和索引顺序访问方法演化而来的。在B+树里面,非叶子节点不再存储数据,仅仅存储索引,而叶子节点存储具体的数据,并且数据之间是从小到大的顺序分布的,叶子结点之间有双向指针,形成双链表的结构。解决了B树的回溯问题,当查找大于某个数的所有数时,只要找到这个数,然后通过指针,直接将后面大于的数直接取出来,不用再向上一个一个的查找,查找的效率有所提高。

preview

 

(1)B树的树内存储数据,因此查询单条数据的时候,B树的查询效率不固定,最好的情况是O(1)。我们可以认为在做单一数据查询的时候,使用B树平均性能更好。但是,由于B树中各节点之间没有指针相邻,因此B树不适合做一些数据遍历操作。

(2)B+树的数据只出现在叶子节点上,因此在查询单条数据的时候,查询速度非常稳定。因此,在做单一数据的查询上,其平均性能并不如B树。但是,B+树的叶子节点上有指针进行相连,因此在做数据遍历的时候,只需要对叶子节点进行遍历即可,这个特性使得B+树非常适合做范围查询。

 

哈希表

哈希表,是根据键(Key)而直接访问在内存存储位置的数据结构

1、数组+链表

2、数组+二叉树

哈希冲突的解决办法两种主要的方法,一个是开放寻址法,一个是拉链法。开放地址法也就是找到下一位空的位置。拉链法是使用链表来解决,同一个位置存放多个数据,通过指针next连接。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值