树和二叉树 - 树
树
树的定义是递归的:在树的定义中又用到树的定义。
树是一种非线性数据结构
特点: (1)没一个节点有且只有一个前驱节点(根节点除外)
(2)数据结点按分支关系组织,清晰反映了数据元素的层次关系
(3)数据元素之间是一对多的关系
树的逻辑结构的表示方法:
(1)树形表示法
(2)文氏图表示法
(3)凹入表示法
(4)括号表示法
A( B( E, F ), C ( G( J ) ), D( H, I( K, L, M )))
树的基本术语
节点的度:某节点的子树的个数
树的度: 树中各节点的度的最大值
分支结点:度不为零的节点
叶子节点:度为零的节点(终端节点)
路径: 从Ki出发“自上而下”到达Kj所通过的树中节点的系列
路径长度:路径所通过的节点个数减1:(如:A->K 路径为:A->D->I->K 长度为3)
树的性质
树中的节点数等于所有节点的分支数加1
度为m的树中的第i层上最多有m^(i-1)个节点
度为m的树中每个节点最多有m个子节点
当一棵m次树的第i层上有m^(i-1)个节点时,称该层是满的
高度为h的树最多有 个节点
节点数之和
具有n个节点的m次树的最小高度为 (向上取整)
树的遍历运算
先根运算:
(1)访问根节点。
(2)按照从左到右的次序依次遍历根节点的每一棵树
上图先根遍历的结果:ABEFCGJDHIKLM
后根遍历:
(1)按照从左到右的次序后根遍历根节点的没一棵子树
(2)访问根节点
上图后根遍历的结果:EFBJGCKLMIDA
层次遍历:
(1)从根结点开始,按从上到下,从左到右的次序访问树中的每一个节点
上图层次遍历的结果:ABCDEFHIJKLM
树的存储结构
双亲存储结构:
Struct PTree{
T data; //存放节点的值
int parent; //存放节点的位置(伪指针)
};
PTree t[MaxSize];//MaxSize最大存放节点数
(1)利用每个节点(根节点除外)只有唯一的双亲性质
(2)访问双亲节点容易,求孩子节点需要遍历整个结构
孩子链存储结构:
(1)查找孩子节点方便,查找双亲节点费时
(2)含n个节点的m次树采用孩子链存储结构有(m*n-n+1)个空指针域
Struct PSonNode{
T data; //存放节点的值
PSonNode *Sons[MaxSons];//指向孩子节点,MaxSons:树的度->某节点最多的孩子节点个数
};
孩子兄弟链存储结构:
Struct PSBNode{
T data; //存放节点的值
PSBNode *vp; //指向孩子节点
PSBNode *hp; //指向兄弟
};
上一篇: 第一次重构
下一篇: Struts2 简单数据验证