| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 3293 人关注过本帖
标题:树的存储方式
只看楼主 加入收藏
bonwe
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2010-3-18
结帖率:0
收藏
已结贴  问题点数:20 回复次数:10 
树的存储方式
数的存储方式有哪些
搜索更多相关主题的帖子: 存储 
2010-04-15 12:59
asdjc
Rank: 6Rank: 6
来 自:武汉
等 级:侠之大者
威 望:7
帖 子:98
专家分:487
注 册:2010-1-22
收藏
得分:2 
b树,二次搜索树,然后有多元的和一些特殊的结构,如:霍夫曼树,堆栈树等。
2010-04-16 20:49
共饮长江水
Rank: 2
等 级:论坛游民
威 望:1
帖 子:31
专家分:47
注 册:2010-3-16
收藏
得分:2 
完全二叉树可顺序存储在数组b{n}中
一般二叉树的顺序存储
(1) 具体方法
  ① 将一般二叉树添上一些 "虚结点",成为"完全二叉树"
  ② 为了用结点在向量中的相对位置来表示结点之间的逻辑关系,按完全二叉树形式给结点编号
  ③ 将结点按编号存入向量对应分量,其中"虚结点"用"∮"表示
2010-04-16 21:15
AI恒子
Rank: 2
等 级:论坛游民
帖 子:8
专家分:12
注 册:2010-4-8
收藏
得分:2 
先序  中序  后序~
2010-04-16 21:57
放风筝的人
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2010-4-16
收藏
得分:2 
回复 3楼 共饮长江水
二叉树不属于树的范畴吧??
2010-04-16 22:17
海平面
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2010-3-20
收藏
得分:2 
饿……你提问了啊!!
2010-04-19 18:08
海平面
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2010-3-20
收藏
得分:0 
答案给你吧:

A双亲表示法
B孩子链表
C孩子兄弟
D顺序
我很纳闷..书上在介绍树和森林的时候介绍的是:双亲,孩子,孩子兄弟..
所以我选的D..但是答案给的是C= =请高人指点..
备注是C的数据结构..
2010-04-19 18:11
海平面
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2010-3-20
收藏
得分:0 
^
2010-04-19 18:12
海平面
Rank: 2
等 级:论坛游民
帖 子:6
专家分:10
注 册:2010-3-20
收藏
得分:0 
1.双亲链表表示法
     双亲链表表示法利用树中每个结点的双亲唯一性,在存储结点信息的同时,为每个结点附设一个指向其双亲的指针parent,惟一地表示任何-棵树。
(1)双亲链表表示法的实现
 方法① 用动态链表实现
 方法② 用向量表示——更为方便

(2)双亲链表向量表示的形式说明
  #define MaxTreeSize 100 //向量空间的大小,由用户定义
  typedef char DataType; //应由用户定义
  typedef struct{
      DataType data;//结点数据
      int parent; //双亲指针,指示结点的双亲在向量中的位置
    }PTreeNode;
  typedef struct{
      PTreeNode nodes[MaxTreeSize];
      int n; //结点总数
    }PTree;
  PTree T; //T是双亲链表
  注意:
     若T.nodes[i].parent=j,则T.nodes[i]的双亲是T.nodes[j]。

(3)双亲链表表示实例
  【例】图6.17(a)的双亲链表表示如下面数组所示。


   
  分析:
     E和F所在结点的双亲域是1,它们的双亲结点在向量中的位置是1,即B是它们的双亲。
  注意:
     ① 根无双亲,其parent域为-1。
     ② 双亲链表表示法中指针parent向上链接,适合求指定结点的双亲或祖先(包括根);求指定结点的孩子或其它后代时,可能要遍历整个数组。

2.孩子链表表示法

(1) 结点结构
① 定长结点
      即树中每个结点均按树的度k来设置指针。
     n个结点的树一共有n*k个指针域,而树中只有n-1条边,故树中的空指针数目为
         kn-(n-1)=n(k-1)+1(k越大,浪费的空间越多)。

②不定长结点
     即树中每个结点按本结点的度来设置指针数,并在结点中增设一个度数域degree指出该结点包含的指针数。
     各结点不等长,虽然节省了空间,但是给运算带来不便。

(2)孩子链表表示法
     孩子链表表示法是为树中每个结点设置一个孩子链表,并将这些结点及相应的孩子链表的头指针存放在一个向量中。

①孩子链表表示法的类型说明
    //以下的DataType和MaxTreeSize由用户定义
    typedef struct CNode{//子链表结点
        int child; //孩子结点在向量中对应的序号
        struct CNode *next;
      }CNode;
    typedef struct{
        DataType data; //存放树中结点数据
        CNode *firstchild;//孩子链表的头指针
      }PTNode;
    typedef struct{
        PTNode nodes[MaxTreeSize];
        Int n,root; //n为结点总数,root指出根在向量中的位置
      }CTree;
    Ctree T; //T为孩子链表表示
  注意:
    当结点T.nodes[i]为叶子时,其孩子链表为空,即T.nodes[i].firstchild=NULL。

②孩子链表表示法实例
【例】图6.17(a)所示树的孩子链表表示T如下面(a)图所示。
         


  注意:
     ① 孩子结点的数据域仅存放了它们在向量空间的序号。
     ② 与双亲链表表示法相反,孩子链表表示便于实现涉及孩子及其子孙的运算,但不便于实现与双亲有关的运算。
     ③ 将双亲链表表示法和孩子链表表示法结合起来,可形成双亲孩子链表表示法。
   【例】上面的(b)图就是用双亲链表表示法来存储图6.17(a)中的树。
         
3.孩子兄弟链表表示法
(1)表示方法
     在存储结点信息的同时,附加两个分别指向该结点最左孩子和右邻兄弟的指针域leftmostchild和rightsibling,即可得树的孩子兄弟链表表示。

(2)表示实例
  【例】图6.17(a)中树的孩子兄弟链表如下图所示。

   
  注意:
     这种存储结构的最大优点是:它和二叉树的二叉链表表示完全一样。可利用二叉树的算法来实现对树的操作。


2010-04-19 18:36
闻闻6
Rank: 1
等 级:新手上路
帖 子:1
专家分:3
注 册:2010-4-19
收藏
得分:2 
A双亲表示法
B孩子链表
C孩子兄弟
D顺序
我很纳闷..书上在介绍树和森林的时候介绍的是:双亲,孩子,孩子兄弟..
所以我选的D..但是答案给的是C= =请高人指点..
备注是C的数据结构..
2010-04-19 21:06
快速回复:树的存储方式
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.099134 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved