定义
树是一种数据结构,它是由n(n>=1)个有限结点组成一个具有层次关系的集合。在计算机存储中属于链式存储结构。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。
它具有以下的特点:
- 每个结点有零个或多个子结点;
- 没有父结点结点称为根结点;
- 每一个非根结点有且只有一个父结点(如有多个父节点则为图);
- 除了根结点外,每个子结点可以分为多个不相交的子树(去掉根节点,即变为“森林”)。
概念
(1)每个元素称为结点(node)。
(2)有一个特定的结点被称为根结点或树根(root)。
(3)除根结点之外的其余数据元素被分为多个互不相交的集合,其中每一个集合本身也是一棵树,被称作原树的子树(subtree)。
树也可以这样定义:树是由根结点和若干颗子树构成的。树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的结点,所定义的关系称为父子关系。父子关系在树的结点之间建立了一个层次结构。在这种层次结构中有一个结点具有特殊的地位,这个结点称为该树的根结点,或称为树根。
(4)空集合也是树,称为空树。空树中没有结点;
(5)孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点;
(6)结点的度:一个结点含有的子结点的个数称为该结点的度;
(8)非终端结点或分支结点:度不为0的结点;
(9)双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点;
(11)树的度:一棵树中,最大的结点的度称为树的度;
(12)结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推;
(13)树的高度或深度:树中结点的最大层次;
(14)堂兄弟结点:双亲在同一层的结点互为堂兄弟;
(15)结点的祖先:从根到该结点所经分支上的所有结点;
(16)子孙:以某结点为根的子树中任一结点都称为该结点的子孙;
(17)森林:由m(m>=0)棵互不相交的树的集合称为森林。
种类
二叉树
| ▪ 二叉树 | ▪ 二叉查找树 | ▪ 笛卡尔树 | ▪ Top tree |
| ▪ T树 |
自平衡二叉查找树
| ▪ AA树 | ▪ AVL树 | ▪ 红黑树 | ▪ 伸展树 |
| ▪ 树堆 | ▪ 节点大小平衡树 |
B树
| ▪ B树 | ▪ B+树 | ▪ B*树 | ▪ Bx树 |
| ▪ UB树 | ▪ 2-3树 | ▪ 2-3-4树 | ▪ (a,b)-树 |
| ▪ Dancing tree | ▪ H树 |
Trie
空间划分树
| ▪ 四叉树 | ▪ 八叉树 | ▪ k-d树 | ▪ vp-树 |
| ▪ R树 | ▪ R*树 | ▪ R+树 | ▪ X树 |
| ▪ M树 | ▪ 线段树 | ▪ 希尔伯特R树 | ▪ 优先R树 |
非二叉树
| ▪ Exponential tree | ▪ Fusion tree | ▪ 区间树 | ▪ PQ tree |
| ▪ Range tree | ▪ SPQR tree | ▪ Van Emde Boas tree |
其他类型
| ▪ 堆 | ▪ 散列树 | ▪ Finger tree | ▪ Metric tree |
| ▪ Cover tree | ▪ BK-tree | ▪ Doubly-chained tree | ▪ iDistance |
| ▪ Link-cut tree | ▪ 树状数组 |
遍历表达法
遍历表达法有4种方法:先序遍历、中序遍历、后序遍历、层次遍历
如图:
其先序遍历(又称先根遍历)为ABDECF(根-左-右)
其中序遍历(又称中根遍历)为DBEAFC(左-根-右)(仅二叉树有中序遍历)
其后序遍历(又称后根遍历)为DEBFCA(左-右-根)
其层次遍历为ABCDEF(同广度优先搜索)