三十三 算法数据结构----有序表

二叉树
定义:二叉树是每个结点最多有两个子树的树结构 。
性质:
1)二叉树的每个结点至多只有二棵子树(不存在度大于2的结点
2)二叉树的子树有左右之分,次序不能颠倒
3)二叉树的第i层至多有2^{i-1}个结点
4)深度为k的二叉树至多有2^k-1个结点
满二叉树
定义:一棵深度为k,且有2^k-1个节点的二叉树,称为满二叉树 。
性质:每一层上的节点数都是最大节点数
完全二叉树
定义:一棵二叉树中,除最后一层外,若其余层都是满的,并且最后一层或者是满的,或者是在右边缺少连续若干节点
性质:
1)具有n个节点的完全二叉树的深度为log2(n+1)
2)深度为k的完全二叉树,至少有2^(k-1)个节点,至多有2^k-1个节点
线索二叉树
定义:利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为”线索”)
哈夫曼树(最优二叉树)
定义:哈夫曼树是带权路径长度最短的树,权值较大的结点离根较近
二叉搜索树/二叉排序树/二叉查找树
定义:它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值
平衡二叉树
定义:平衡二叉树又称AVL树,它是一 棵空树或它的左右两个子树的高度差的绝对值不超过1
伸展树
定义:伸展树是在查询或删除时对二叉查找树进行伸展操作,并保证从空树开始任意连续M次对树的操作最多花费O(MlogN)的时间 。对二叉查找树进行伸展的意义是将访问路径上的节点尽可能的推向离树根最近的地方,有益于在下次访问时用时最少 。通常一个节点被访问时,很可能不久会被再次访问 。
红黑树
定义:是一种自平衡二叉查找树,其性质决定了最大一条路径节点个数不会超过最小的两倍
1)性质1. 节点是红色或黑色 。
2)性质2. 根节点是黑色 。
3)性质3 每个叶节点(NIL节点,空节点)是黑色的 。
4)性质4 每个红色节点的两个子节点都是黑色 。(从每个叶子到根的所有路径上不能有两个连续的红色节点)
5)性质5. 从任一节点到其每个叶子的所有路径都包含相同数目的黑色节点 。
B树
定义:二叉搜索树
性质:
1)所有非叶子结点至多拥有两个儿子(Left和Right);
2)所有结点存储一个关键字;

三十三  算法数据结构----有序表

文章插图
3)非叶子结点的左指针指向小于其关键字的子树,右指针指向大于其关键字的子树;
B-树
定义:是一种多路搜索树
B+树
定义:B+树是B-树的变体,也是一种多路搜索树,所有关键字都在叶子结点出现
B*树
定义:是B+树的变体,在B+树的非根和非叶子结点再增加指向兄弟的指针,节点分裂优先给兄弟节点
搜索二叉树
搜索二叉树一定要说明以什么标准来排序
经典的搜索二叉树,树上没有重复的用来排序的key值
如果有重复节点的需求,可以在一个节点内部增加数据项
搜索二叉树查询key(查询某个key存在还是不存在)
1)如果当前节点的value=http://www.kingceram.com/post/=key,返回true
2)如果当前节点的value,当前节点向左移动
3)如果当前节点的value>key,当前节点向右移动
4)如果当前节点变成null,返回false
搜索二叉树插入新的key
和查询过程一样,但当前节点滑到空的时候,就插入在这里