树
一、什么是树
-
树在计算机术语中是一种数据的存放结构,是由n(n>=1)个有限节点组成的具有层次关系的集合
-
这种结构的构成跟自然界中的树很相似
1.1、树的特点
-
每个节点都有零个或多个节点
-
每一个非根节点有且只能有一个根节点
-
每个节点及其后代节点都可以看成一颗树
- subTree
-
半线性
- 节点的父节点必然存在且唯一 但是后代不唯一也不必然存在
二、关于树的概念
2.1、度
-
节点的度
- 以该节点为根节点的节点的数量
- 分支节点
- 度不为0的节点称为分支节点
- 叶子
- 度为0的节点称为叶子节点 或终端节点
- 树身为一个有限的集合 那么就一定会有最值(某个节点的深度为maxValue 叶子节点)
-
树的度
- 取树中度最大的节点的度作为树的度
2.2、层次
-
从根开始计算 根的层次为 1(0 还是 1 可能有争议)根的孩子为第二层 依次增加
-
深度
- 对于任意节点n,n的深度为从根到n的唯一路径长,根的深度为0;
-
高度
- 对于任意节点n,n的高度为从n到一片树叶最长路径长,所有树叶的高度为0
- 树的高度为叶子节点中深度最大者的高度(深度和高度在此刻相等)
- height(v)=height(subtree(v)) 任何一棵子树的高度等价于其根节点的高度
- 根节点的高度为 0 如果一棵树没有任何节点那么它的高度为-1
-
路径 v to r
- 任意节点v从到根节点r存在唯一一条通路
- path(v)上的点除了v点本身都是 它的祖先(ancestor) 而v是他们的[真]后代
-
高度和深度的关系
- 存在树 T
- 对于T中任意一个节点v 深度(v)+高度(v)<=高度(T)
2.3、森林
- m(m>=0)棵互不相交的树的集合
- 一棵树的所有根节点的集合就是一个森林(每个子数都可以看成一颗树了)
2.4、根节点
- 是树中所有非根节点的祖先节点
- 根节点没有父节点
2.5、有序树和无序树
-
无序树
- 树中任意节点的子节点之间没有顺序关系
- 树中任意节点的子节点之间没有顺序关系
-
有序树
- 树节点之间存在顺序关系
- 若将树中每个结点的各子树看成是从左到右有次序的(即不能互换),则称该树为有序树(Ordered Tree);
- 树节点之间存在顺序关系
三、树和图的关系
- 树是边最多的无环图同时由于它的特性它还是连通的
- 无环连通图
- 极小连通图 (连通图中消耗的边最少的)
- 极大无环图 (再无环的情况下 消耗最多的边)
四、树的存储结构
-
邻接表
- 空间开销较大 对于根节点向下搜索复杂度开销大
- 对于子节点向上搜索 开销小
-
邻接举证
-
父亲+长子
- 每个节点均设置 父亲和长子两个引用
- 横向间的移动从兄长开始(第一个节点)
-