树:元素之间存储一对多关系的数据结构,常用于表现族谱关系、组织关系等,也可以借助特殊的树型结构实现查找、排序等算法,一般使用倒悬树的方式表示。
树的相关术语:
根结点:树的最上层元素,有且只能有一个。
子结点:该结点的对应下一层元素。
父结点:该结点的对应上一层元素。
叶子结点:没有子结点的元素,一般处于树的最底层。
兄弟结点:具有同一个父结点的元素,处在同一层。
高度:指的是树的层数。
密度:指的是树的结点数(包括根结点)。
度:指的是结点的子结点数量。
普通树:
子结点的数量没有限制。
顺序存储:
1、每个结点一行
下标 数据 父结点下标
0 R -1
1 A 0
2 B 0
3 C 0
4 D 1
5 E 1
6 F 2
7 G 2
8 H 2
9 I 3
10 J 3
11 K 5
12 L 7
2、兄弟结点连续存储
下标 数据 父结点下标 第一个子结点下标
0 R -1 1
1 A 0 4
2 B 0 6
3 C 0 9
4 D 1 -1
5 E 1 11
6 F 2 -1
7 G 2 12
8 H 2 -1
9 I 3 -1
10 J 3 -1
11 K 5 -1
12 L 7 -1
3、兄弟结点连续存储
下标 数据 父结点下标 第一个子结点 最后一个子结点
0 R -1 1 3
1 A 0 4 5
2 B 0 6 8
3 C 0 9 10
4 D 1 -1 -1
5 E 1 11 11
6 F 2 -1 -1
7 G 2 12 12
8 H 2 -1 -1
9 I 3 -1 -1
10 J 3 -1 -1
11 K 5 -1 -1
12 L 7 -1 -1
链式序存储:
typedef struct Node
{
TYPE data;
struct Node* brother;
struct Node* child;
}Node;
二叉树:子结点的数量多为2。
相关术语:
前序遍历:根,左,右
中序遍历:左,根,右
后序遍历:左,右,根
层序遍历:从上到下,先左后右
几种较为常见的树:
普通二叉树:对二叉树的结没有位置及数量上的要求。
满二叉树:树的每一层的结点数量都 pow(2,层数-1)
完全二叉树:除了最后一层,其它每一层的结点数量都是 pow(2,层数-1),最后层的结点按照从左往的顺序存储。
有序二叉树:所有的左子结点都小于根结点,所有右子结点都大于根结点。
平衡二叉树:首先是有序的二叉树,树的左右子树的高度相差不超过1,并且子树的子树都满足这个要求。