满二叉树
一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,如果一个二叉树的层数为K,且结点总数是(2^k) -1 ,则它就是满二叉树。
完全二叉树
完全二叉树是由满二叉树而引出来的。
若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
二叉查找树/二叉搜索树/搜索二叉树/二叉排序树
二叉查找树(Binary Search Tree),它或者是一棵空树,或者是具有下列性质的二叉树: 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值; 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值; 它的左、右子树也分别为二叉排序树。
中序遍历的结果恰好是排序的
线索二叉树
n个结点的二叉链表中含有n+1(2n-(n-1)=n+1)个空指针域(就是用于指向左右孩子的域)。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前驱和后继结点的指针(这种附加的指针称为"线索")。加上线索的二叉树称为线索二叉树。
这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。
线索链表解决了无法直接找到该结点在某种遍历序列中的前驱和后继结点的问题,解决了二叉链表找左、右孩子困难的问题。
哈夫曼树/最优二叉树
哈夫曼树(霍夫曼树)又称为最优树,是一种带权路径长度最短的二叉树。
- 路径和路径长度
在一棵树中,从一个结点往下可以达到的孩子或孙子结点之间的通路,称为路径。通路中分支的数目称为路径长度。若规定根结点的层数为1,则从根结点到第L层结点的路径长度为L-1。 - 结点的权及带权路径长度
若将树中结点赋给一个有着某种含义的数值,则这个数值称为该结点的权。结点的带权路径长度为:从根结点到该结点之间的路径长度与该结点的权的乘积。 - 树的带权路径长度
树的带权路径长度规定为所有叶子结点的带权路径长度之和,记为WPL(Weighted Path Length)。
权值越大的结点离根节点越近的二叉树才是最优二叉树。
平衡二叉树/平衡二叉搜索树/AVL树
- Balanced Binary Tree/Self-balancing binary search tree
- 它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。
- 平衡二叉树的常用实现方法有红黑树、AVL、替罪羊树、Treap、伸展树等
B 树/B+ 树/2-3 树/ 2-3-4 树
- B 树
- 所有叶节点在同一层
- 所有节点都存储数据
- 2-3 树
- 是 3 阶的 B 树
- 是对二叉树的扩展,其中只有 2 节点和 3 节点
- 有 2 个子节点的节点叫 2 节点,有 3 个子节点的节点叫 3 节点
- 2 节点要么有 2 个子节点,要么没有子节点,3 节点要么有 3 个子节点,要么没有子节点
- 2-3-4 树同理
- 是 4 阶的 B 树
- B+ 树
- 是 B 树的变形
- 非叶节点只存储索引信息,不存储数据
- 叶子节点最右边的指针指向下一个相邻的叶节点
- 所有的叶节点组成了一个有序链表