树的双亲表示法

此前写过二叉树的顺序存储和链式存储,此篇文章将介绍普通树是如何存储的...


通常,存储具有普通树结构数据的方法有 3 种:

  1. 双亲表示法
  2. 孩子表示法
  3. 孩子兄弟表示法

而本篇文章将优先介绍双亲表示法!!!

双亲表示法采用顺序表(数组)存储普通树,其实现的核心思想是:顺序存储各个节点的同时,给各节点附加一个记录其父节点位置的变量

图 1 普通树

双亲表示法存储图 1 中普通树,其存储状态如图 2 所示 :

图 2 双亲表示法存储普通树示意图

注意!!!根节点没有父节点,因此根节点记录父节点位置的变量通常置为 -1

树的双亲表示法的代码实现

#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100  // 宏定义树中结点的最大数量typedef struct Snode{char data;int parent;
} PTNode;typedef struct{PTNode tnode[MAX_SIZE];  // 存放树中所有结点int n;  // 结点数
} PTree;PTree *InitPNode(PTree *tree){int j;char ch;printf("请输入节点个数:\n");  // 10 scanf("%d", &(tree->n));printf("请输入结点的值和其双亲位于数组中的位置下标:\n");for(int i = 0; i < tree->n; i++){getchar();  // 作用: 读取回车符 scanf("%c %d", &ch, &j);tree->tnode[i].data = ch;tree->tnode[i].parent = j;}return tree;
}void FindParent(PTree *tree){char a;int isfind = 0;  // 是否找到的标志 printf("请输入要查询的结点值:\n");getchar();  // 作用: 读取回车符 scanf("%c", &a);  // Cfor(int i = 0; i < tree->n; i++){if(tree->tnode[i].data == a){isfind = 1;int ad = tree->tnode[i].parent;printf("%c的父节点为 %c,存储位置下标为 %d", a, tree->tnode[ad].data, ad);break;}}if(isfind == 0){printf("树中无此节点");}
}int main(void){PTree *tree = (PTree*)malloc(sizeof(PTree));// 初始化数组(数组数据项为" ",父节点位置为 0) for(int i = 0; i < MAX_SIZE; i++){tree->tnode[i].data = ' ';tree->tnode[i].parent = 0;}tree = InitPNode(tree);FindParent(tree);return 0;
}

(数据结构)树的双亲表示法相关推荐

  1. 2021秋季《数据结构》_EOJ 1063.树的双亲存储法(parent+child / parent)

    题目 前面介绍了树的链式存储结构,那么如何用顺序存储来存储一棵树呢?在顺序存储时,我们除了存储每个结点值外,还要存储树中结点与结点之间的逻辑关系(即双亲与孩子结点之间的关系).下面介绍树的双亲存储法. ...

  2. 数据结构——树 | 孩子双亲数组表示法

    采取的是顺序存储结构 数组模式 #include<iostream> using namespace std; #define MAXTREE 25 //定义树的最大结点数 //#defi ...

  3. C#实现树的双亲表示法

    using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...

  4. 树的双亲表示法(C语言实现)——树的存储结构

    #include<stdio.h> #include<stdlib.h> #define MaxSize 100 typedef char DataType;// 数组结点 t ...

  5. 6-5-树的双亲表示法-树和二叉树-第6章-《数据结构》课本源码-严蔚敏吴伟民版...

    课本源码部分 第6章  树和二叉树 - 树的双亲表示法 --<数据结构>-严蔚敏.吴伟民版        源码使用说明  链接☛☛☛ <数据结构-C语言版>(严蔚敏,吴伟民版) ...

  6. 数据结构与算法(6-1)树的存储(树的双亲表示、树的孩子表示及树的双亲孩子表示)

    目录 一.树的双亲表示 存储结构 总代码 二.树的孩子表示 存储结构 总代码 三.树的双亲孩子表示 存储结构 一.树的双亲表示 存储结构 采用结构体数组的形式存储数据. (根结点parent=1:它没 ...

  7. 树的先序遍历(双亲表示法)

    题目描述 给出一棵树的双亲表示法结果,用一个二维数组表示,位置下标从0开始,如果双亲位置为-1则表示该结点为根结点 编写程序,输出该树的先根遍历结果. 输入 第一个输入t,表示有t棵树 接着每棵树输入 ...

  8. 数据结构-树与二叉树

    文章目录 一:树 (1)树的概念 (2)树的一些基本术语 (3)树的表示 A:孩子兄弟表示法 B:双亲表示法 C:孩子表示法 二:二叉树 (1)二叉树的概念 (2)特殊的二叉树 (3)二叉树的性质 ( ...

  9. 【数据结构(C语言)】数据结构-树

    树 文章目录 树 一.基本概念 1.树的定义 2.树的节点 3.树的性质 4.基本操作 二.二叉树 1.二叉树的特点 2.特殊二叉树 3.性质 4.存储结构 (1)二叉链表 (2)三叉链表 5.线索化 ...

最新文章

  1. Windows程序设计------字体不等宽引出的问题及其细节知识
  2. Java 多线程编程(锁优化)
  3. 1.4 微生物对人类社会的影响
  4. 虚拟社会建设需要“网络社工”助力
  5. html5计数器,CSS 计数器(counter)
  6. 22(2)序列化以及反序列化
  7. android前台进程视频教程,Android Twilio视频通话,唤醒应用程序并进入前台
  8. rest laravel_如何通过测试驱动开发来构建Laravel REST API
  9. 各大媒体优劣对比_吉利星瑞特别版对比朗逸,亮点只有性价比?
  10. 媒体播放控件的引入 0131
  11. Sigar介绍和配置
  12. 连续状态空间模型离散化
  13. 【手机连接adb的两种方法】
  14. 【IT软技能】如何使用中文维基百科
  15. 一个关于创业不错的博客
  16. mysql按周几查询时间戳转周几星期
  17. 快应用的用法和常见问题解答(上)
  18. bm26 bm27 bm5
  19. MacBook A1278 13.3笔记本进液维修浅谈
  20. 【bat】验证是否安装某个软件

热门文章

  1. python 按列读取数据并写入txt_Python数据分析之Pandas读写外部数据文件!
  2. pandas 取excel 中的某一列_Python数据分析之Pandas读写外部数据文件
  3. Python爬虫练习:JS解密,爬取某音漫客网站数据
  4. 题1003、1004、1005
  5. 全局坐标系与车身坐标系转换
  6. data whale_data_analysis_task2_数据可视化
  7. python tkinter控件_Python——Tkinter窗口的函数,Pythontkinter,视窗,功能,部件
  8. 短网址ShortUrl的算法
  9. 不规则多边形区域的面积计算算法
  10. 性格色彩测试android程序开发之三--dialog(续)