当前位置:   article > 正文

【数据结构】树的三种存储结构

树的三种存储结构

树的存储结构分为3种:双亲表示法,孩子表示法和孩子兄弟表示法

1.双亲表示法

采用的一组连续的存储空间来存储每个节点。以双亲作为索引的关键词的一种存储方式。每个结点只有一个双亲,所以选择顺序存储占主要。

根节点没有双亲,所以其在数组中存储的值为-1。

其余的节点,只需要存储其父节点对应的数组下标即可。

  1. // 双亲表示法
  2. #define MAX_SIZE 100
  3. typedef int ElemType;
  4. typedef struct PTNode{
  5. ElemType data;
  6. int parent;
  7. }PTNode;
  8. typedef struct PTree{
  9. PTNode nodes[MAX_SIZE];
  10. int n;
  11. }PTree;

 2.孩子表示法

将每个节点的孩子节点都用单链表连接起来形成一个线性结构,n个节点具有n个孩子链表。由于每个结点可有多个子树(无法确定子树个数),可以考虑使用多重链表来实现。

  1. // 孩子表示法
  2. #define MAX_SIZE 100
  3. typedef int ElemType;
  4. typedef struct CNode{//孩子结点
  5. int child;
  6. struct CNode *next;//指向下一个兄弟
  7. }CNode;
  8. typedef struct PNode{//双亲结点
  9. ElemType data;
  10. struct CNode *child;
  11. }PNode;
  12. typedef struct CTree{
  13. PNode nodes[MAX_SIZE];
  14. int n;
  15. }CTree;

3.孩子兄弟表示法(二叉链表表示法)

以二链表作为树的存储结构,又称二叉树表示法。任意一棵树,他的结点的第一个孩子如果存在就是唯一结点,他的右兄弟如果存在,也是唯一的,因此,我们设置两个指针,分别指向该结点的第一个孩子和该结点的右兄弟。

  1. //孩子兄弟表示法
  2. typedef int ElemType;
  3. typedef struct Node{
  4. ElemType data;
  5. struct Node *FirstChild;//左孩子
  6. struct Node *NextBrother;//右兄弟
  7. }Node,TREE;

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/黑客灵魂/article/detail/1017925
推荐阅读
相关标签
  

闽ICP备14008679号