一、基本术语

  1. 节点的度和树的度:树中某个节点的子树的个数称为该节点的度。树中各节点的度的最大值称为树的度,通常将度为m的树称为m次树。
  2. 分支节点和叶子节点:度不为0的节点称为非终端节点,也叫分支节点。度为0的节点为终端节点或叶子节点。
  3. 路径和路径长度:路径长度等于路径所通过的节点数目减1。显然从树的根节点到树中其余节点均存在唯一路径。
  4. 孩子节点、双亲节点、兄弟节点、子孙节点、祖先节点
  5. 节点的层次和树的高度:根节点在第一层,依次类推。树中节点的最大层次称为树的高度或树的深度。
  6. 森林:n个互不相交的树的集合称为森林。只要把树的根节点去掉就成了森林,反之,只要给n颗独立的树加上一个节点,并把这n颗树作为该节点的子树,则森林就变成了树。


二、树的性质

1、树中的节点数等于所有节点的度数加1。


每个节点(除根节点外)与指向它的一个分支一一对应。


2、度为m的树中第i层上至多有m^(i-1)个节点(i>=1)


当一颗m次树的第i层有m^(i-1)个节点,则称该层是满的。若一颗m次树的所有叶子节点在同一层,除该层外其余每一层都是满的,称该树为满m次树。显然,满m次树是所有相同高度的m次树中节点总数最多的树。也就是说,对于n个节点,构造的m次树为满m次树,此时树的高度最小。


3、高度为h的m次树最多有(m^h-1)/(m-1)个节点。


4、具有n个节点的m次树的最小高度为 logm(n(m-1)+1)向上取整。最大高度为n-m+1。


5、所有节点的度之和=n-1

      所有节点的度之和=n1+2n2+.....+knk

      n = n0+n1+n2+n3+.....+nk


三、树的基本运算

1、寻找满足某种特定关系的节点。如当前节点的双亲节点,孩子节点,叶子节点等等

2、插入或删除某个节点

3、遍历:先根遍历、后根遍历和层次遍历。(前两种是递归算法,最后一种是用队列实现)


四、树的存储结构

1、双亲存储结构

           是一种顺序存储结构,用一组连续空间存储树中的所有节点,同时在每个节点中附加一个伪指针指示其双亲节点的位置。根节点双亲位置为-1,其余的节点双亲位置是索引下标。

            typedef struct {

                      ElemType data;

                      int parent;

              }PTree[MaxSize];

特点:求某个节点的双亲节点非常容易,但是求某个节点的孩子节点时需要遍历整个结构。


2、孩子链存储结构

               

            typedef struct node {

                      ElemType data;

                     struct node *sons[MaxSons];

              }TSonNode;

其中,MaxSons为最多的孩子节点的个数,即为该树的度。

特点:查找孩子节点十分方便,但是查找某节点的双亲节点比较费时,另外,当树的度较大时,存在较多的空指针域。


3、孩子兄弟链存储结构


            typedef struct tnode{

                      ElemType data;

                      struct tnode *hp;

                      struct tnode *vp;

              }TSBNode;

孩子兄弟链存储结构实际上是把该树转换为二叉树的存储结构,把树转换为二叉树所对应的结构恰好是这种孩子兄弟链存储结构,所以,其最大优点是可方便地实现树和二叉树的相互转换。还是缺点同孩子链存储结构,从当前节点查找其双亲节点比较麻烦,需要从树的根节点开始遍历查找。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值