面试准备-数据结构(持续更新)

1、二叉查找树

若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
任意节点的左、右子树也分别为二叉查找树。
没有键值相等的节点(no duplicate nodes)。

2、二叉平衡树,AVL树:

首先是二叉查找树,并且左右两个子树都是一棵平衡二叉树,左右子树高度差不超过1

3、红黑树:

首先是二叉查找树,
每个结点要么是红的要么是黑的。
根结点是黑的。
每个叶结点(叶结点即指树尾端NIL指针或NULL结点)都是黑的。
如果一个结点是红的,那么它的两个儿子都是黑的。
且每个节点到叶子节点路过的黑色节点个数一致

4、B树
平衡多叉树,一颗最小度为t的B树,
每个节点最多包含2t−1个关键字;除根节点外的每个节点至少有t−1个关键字,根节点至少有一个关键字
节点中的关键字非降序排列
设节点有n个关键字,则该节点有n+1个子树
所有叶子节点在同一高度

5、B+树
一颗阶数为m的B+树
除根节点外的内部节点,每个节点最多有m个关键字,最少有⌈m/2⌉个关键字。其中每个关键字对应一个子树(也就是最多有m棵子树,最少有⌈m/2⌉棵子树);
根节点要么没有子树,要么至少有2棵子树;
所有的叶子节点包含了全部的关键字以及这些关键字指向文件的指针,并且:
所有叶子节点中的关键字按大小顺序排列
相邻的叶子节点顺序链接(相当于是构成了一个顺序链表)
所有叶子节点在同一层
所有分支节点的关键字都是对应子树中关键字的最大值

6、跳跃表

  • 一个跳跃表应该有若干个层(Level)链表组成;
  • 跳跃表中最底层的链表包含所有数据; 每一层链表中的数据都是有序的;
  • 如果一个元素X出现在第i层,那么编号比 i 小的层都包含元素X;
  • 第 i 层的元素通过一个指针指向下一层拥有相同值的元素;
  • 在每一层中,-∞ 和 +∞两个元素都出现(分别表示INT_MIN 和 INT_MAX);
  • 头指针(head)指向最高一层的第一个元素;

示意图可参考:https://blog.csdn.net/DERRANTCM/article/details/79063312
代码实现可参考:https://www.jianshu.com/p/60d2561b821c

你可能感兴趣的:(面试,算法数据结构)