树是数据结构中很重要的一环。工作中,也常常用到。
树,是一种数据的表示结构,主要用于算法中的查找、排序。常常与指针联系在一起。
树有许多种,读书的时候,印象中就是一大堆树,搞不清。现在梳理一下:
0、二叉树
1)非空二叉树只有一个根节点(空的话,一个节点也没有了,哪还是树吗?)
2)每个节点至多两个子树,成为左、右子树
满二叉树与完全二叉树是两种特殊的二叉树:
1、满二叉树
除了叶子结点,每个非叶子结点都有两个结点。
2、完全二叉树
除最后一层,每一层的结点都达到最大值,且最后一层只缺少右边的若干结点。完全二叉树就是最后一层的右叶子结点可能会残缺的二叉树。
二叉树的遍历,按根结点遍历的顺序分为前序、中序、后序。
3、二叉链表
二叉树通常采用链式存储结构。二叉树每个结点的存储结构以由2部分组成:数据域与指针域。指针域有两个,分别指向左右子结点。因此二叉树的链式存储结构也成为二叉链表。
4、穿线二叉树
二叉链表中,每个结点有两个指针域。对于叶子结点来说,没有子节点,指针根本没用。于是就可以用来存储遍历树的顺序,如同在二叉链表中增加了一条线索,故名穿线二叉树。
5、最优二叉树
最优二叉树是构造出来的。利用霍夫曼算法构造出来的二叉树叫最优二叉树。最优二叉树可以用来优化算法。比如霍夫曼编码。
6、二叉排序树
二叉排序树用于查找。
首先将无序表构造成二叉排序树,然后利用这个树,就能很快的进行查找鸟。
所谓的二叉排序树是这样的:
1)左子树上的所有结点都小于根节点
2)右子树上的所有结点都不小于根节点
3)左右子树也满足上述两个要求
7、B- 树
一种动态调节的平衡多路查找树,作用也是在于有利查找。
B-树不一定是二叉树,是多路树。什么意思?就是一个结点有好多数据域组成,然后每个数据域左右两边都有一个指针域,一个结点有n个数据域的话,就会有n+1个指针域。
B-树的定义很繁复,突出的2点就是:
1)数据域左边的子树中,所有数据域都小于它;右边的子树中,所有数据域都不小于它。
2)B-树是有序的,从左到右,左小右大,数据散落在所有结点上,包括叶子、非叶子。
B-树是分阶的。所谓的阶,就是每个结点可以放多少个数据域。比如,3阶B-树,就是每个结点最多有3个数据域。有数据加入或者删减,那就要有所调整,甚至也许因为某结点放不下了,还要进行裂变。
8、B+ 树
B+树是B-树的变种。不同的是,数据散落在B-树的所有结点上,而B+树则是,位于非叶结点上的数据,在叶子结点上也会有一份。比如说,数据52,在B-树位于根节点,那么它在叶子结点上就没有;但在B+树,它在某个叶子结点上也会存在。就是说,B+树的叶子结点,有全部的数据。
到这里,说SQL SERVER建了聚集索引的表,存储结构是B+树就很好理解了。聚集索引字段,位于非叶子结点,而叶子结点,则包含全部字段。。。
宝贝、宝贝,我是你的大叔