【数据结构】树
概念
(百度百科)树状图是一种数据结构,它是由n(n>=1)个有限节点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
从概念去理解,之所以叫“树”是因为形状像树,并非对“真实树”的模仿,所以不像链表结构一样可以参考现实中链状事物的构造。例如“真实树”有树干,而树状图是没有树干概念的,那么树状图又有什么特点呢,继续看:
1、每个节点有零个或多个子节点;
2、没有父节点的节点称为根节点;
3、每一个非根节点有且只有一个父节点;
4、除了根节点外,每个子节点可以分为多个不相交的子树;
从以上特点可以看出,零个节点也可以是数,零节点相当于一个空集合,空集合也是树,称为空树,空树中没有结点。
术语
1、节点的度:一个节点含有的子树的个数称为该节点的度;
如上图,A结点的度为3,B结点的度为2,c结点的度为1,D结点的度为3。
2、叶节点或终端节点:度为0的节点称为叶节点;
如上图,E、F、G、H、I、J均为叶节点。
3、非终端节点或分支节点:度不为0的节点;
如上图,A、B、C、D均为非终端节点。
4、双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
如上图,A、B、C、D均为父节点。
5、孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
如上图,B、C、D为A的子节点,E、F为B的子节点,G为C的子节点,H、I、J为子D的子节点。
6、兄弟节点:具有相同父节点的节点互称为兄弟节点;
如上图,B、C、D的父节点均为A,所以B、C、D为兄弟节点。
7、树的度:一棵树中,最大的节点的度称为树的度;
如上图,A、D节点的度均为最大值3,所以此树的度为3。
8、节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
如上图,A为第1层、B、C、D为第2层、E、F、G、H、I、J为第3层。
9、树的高度或深度:树中节点的最大层次;
如上图, E、F、G、H、I、J节点均为最大层第3层,所以次树的高度或深度为3。
10、堂兄弟节点:双亲在同一层的节点互为堂兄弟;
如上图, {E、F}与{G}与{H、I、J}是堂兄弟节点。
节点的祖先:从根到该节点所经分支上的所有节点;
如上图, 例如E节点的祖先有B、A。
子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
如上图, 例如以A节点为根,那么除了自己的所有节点都是A的子孙。
森林:由m(m>=0)棵互不相交的树的集合称为森林;在数据结构中,树和森林并不像自然界里有一个明显的量的差别,任何一棵树,只要删去根结点就成了森林。
如上图, 除去根节点A,那么{B、E、F}、{C、G}、{D、H、I、J}这三棵互不相交的树就组成了一个森林。
种类
1、有序树:树中任意节点的子结点之间有顺序关系,这种树称为有序树;
2、无序树:树中任意节点的子结点之间没有顺序关系,这种树称为无序树,也称为自由树;
类型
1、二叉树
二叉树、二叉查找树 (BST)、笛卡尔树、Top tree、T树
2、自平衡二叉查找树
AA树、AVL树、红黑树、伸展树、树堆、节点大小平衡树
3、B树
B树、 B+树、 B*树、Bx树、UB树、2-3树、2-3-4树、(a,b)-树、Dancing tree、H树
4、Trie
前缀树、后缀树、基数树
5、空间划分树
四叉树、八叉树、k-d树、vp-树、R树、R*树、R+树、X树、M树、线段树、希尔伯特R树、优先R树
6、非二叉树
Exponential tree、Fusion tree、区间树、PQ tree、Range tree、SPQR tree、Van Emde Boas tree
7、其他类型
堆、散列树、Finger tree、Metric tree、Cover tree、BK-tree、Doubly-chained tree、iDistance、Link-cut tree、树状数组