树型结构:
1、树的基本概念
一种层次关系的数据结构(一对多)
有且仅有一个特定的节点,该节点没有前驱指针,被称为根节点
剩余的n个互不相交的子集组成,其中的每一个子集都是一棵树,被称为根节点的子树
注意: 树型结构具有递归性(树中有树)
2、树的表示方法: 倒悬树、嵌套法、凹凸法
3、树的专业术语(不同资料略有不同)
节点: 组成树的基础元素,同时它也可以一棵树
节点的度: 该节点子树的数量
节点的层次: 根节点的层次为1,它的孩子层次为2,...,以此类推
树的度: 树中节点的数量
树的深度: 树的最大层次树
叶子节点: 节点的度为0的节点
双亲和孩子: 节点的子树都称为该节点的孩子节点,该节点是双亲节点
兄弟节点: 具有同一个双亲节点
祖先节点: 从根节点出发到该节点,中间经过的所有节点
子孙节点: 一个节点的子树中的任意一个节点
堂兄弟节点: 双亲节点在同一层
森林: n个互不相交的树的集合称为森林
4、树的存储
树可以顺序存储,也可以链式存储,还可以混合存储,由于存储的信息不同,
有以下三种常见表示方式
双亲表示法(顺序):
位置 data 双亲的位置
0 A -1
1 B 0
2 C 0
3 D 1
4 E 1
5 F 2
6 G 3
7 H 4
8 I 4
优点: 方便找到双亲
缺点: 不方便找孩子
孩子表示法
顺序: 没有孩子也要申请数组,所以浪费空间
位置 data sub_arr(存储孩子位置的数组)
0 A 1,2
1 B 3,4
2 C 5
3 D 6
4 E 7,8
5 F
6 G
7 H
8 I
混合(链式+顺序): 节约空间
位置 data ListHead
0 A 1->2->N
1 B 3->4->N
2 C 5->N
3 D 6->N
4 E 7->8->N
5 F
6 G
7 H
8 I
优点: 方便找到孩子
缺点: 不方便找双亲
兄弟表示法:
双亲只存储第一个孩子节点,然后链式指向所有的兄弟节点
优点: 可以方便查询到所有的兄弟节点
缺点: 查询双亲比较麻烦
总结: 普通树不常用,一般会转换成二叉树使用