数据结构——树 | 孩子双亲数组表示法
采取的是顺序存储结构 数组模式
#include<iostream>
using namespace std;
#define MAXTREE 25 //定义树的最大结点数
//#define NULL 0
typedef char element;
typedef int Status;
//孩子双亲数组表示法
typedef struct TreeData
{int parent; //定义每个结点双亲所在位置的下标element data; //每个结点存放的数据
}TreeData;typedef struct PTree
{TreeData data[MAXTREE]; //树的结点数组 用TreeData 定义 所以这个数组的结构里有parent 和 dataint r; //根结点的下标int n; //当前树中结点的数目
}PTree;//构造空树——初始化未定//构造树
Status GreatTree(PTree &tree)
{cout << "输入双亲表示法中树根的位置" << endl;//先输入树根所在位置 一般为-1 也有为0的cin >> tree.r;cout << "输入双亲表示法中树结点个数" << endl;//cin >> tree.n;cout << "输入双亲表示法中树结点结构" << endl;for (int i = 0; i<tree.n; i++){cin >> tree.data[i].data >> tree.data[i].parent;//按照顺序输入内容data和其双亲位置}cout << "index" << "\t" << "data" << "\t" << "parent" << endl;//输出界面规范化for (int i = 0; i<tree.n; i++){cout << i << "\t" << tree.data[i].data << "\t" << tree.data[i].parent << "\t" << endl;}return 0;
}//清空树
Status ClearTree(PTree &tree)
{int i;if (tree.n >= 0) {for (i = 0; i <= tree.n; i++){tree.data[i].data =' ';}cout << "树清空" << endl;}else{cout << "树原本不存在" << endl;}return 0;
}//若数为空树返回提示,否则按普通双亲输出树
Status OutputTree(PTree &tree)
{int i;if (tree.n > 0){for (i = 0; i <tree.n; i++){cout <<"树存在,其结构为: "<<endl<< tree.data[i].data << '\t'<<tree.data[i].parent << endl;}}else{cout << "这树不存在,无法返回树的内容" << endl;}return 0;
}//求树的深度 本例根节点位置为0 根节点层数为1 所以层数比深度高度多1
Status DepthTree(PTree &tree)
{int i;}
int main()
{PTree tree,bigtree,smalltree;//生成树GreatTree(tree);int c;cout << "是否需要清空树,如是请输入0,不销毁请输入1" << endl;cin >> c;if (c == 0)ClearTree(tree);elsereturn 1;cout << "再次生成一棵树:bigtree" << endl;GreatTree(bigtree);cout << "输出一棵树:tree" << endl;OutputTree(tree);cout << "输出一棵树:bigtree" << endl;OutputTree(bigtree);//返回树的深度 若结点是非根结点并返回其双亲,否则是根结点其结果为空 若结点是非叶子结点,返回左孩子 若结点有右兄弟,返回其右兄第 插入一颗树 删除一棵树return 0;
}/*A -1
B 0
C 1
D 2
E 2
F 1
G 0
H 6
I 0
J 8
K 8
L 8
O 9
P 9
M 9
N 9*/
N叉树之孩子双亲表示法|数据结构——树|C++实现
数据结构——树 | 孩子双亲数组表示法相关推荐
- 数据结构——树|N叉树之孩子双亲表示法——顺序存储结构+链表
N叉树之孩子双亲表示法 左边是表头结构,相当于一个顺序存储,开始只做了一个顺序结构,发现诸多不便之处,随即开始孩子双亲表示法的学习,这个表示法,需要定义三个结构: 孩子结构 表头结构 树的结构 按理说 ...
- 数据结构与算法(6-1)树的存储(树的双亲表示、树的孩子表示及树的双亲孩子表示)
目录 一.树的双亲表示 存储结构 总代码 二.树的孩子表示 存储结构 总代码 三.树的双亲孩子表示 存储结构 一.树的双亲表示 存储结构 采用结构体数组的形式存储数据. (根结点parent=1:它没 ...
- 2021秋季《数据结构》_EOJ 1063.树的双亲存储法(parent+child / parent)
题目 前面介绍了树的链式存储结构,那么如何用顺序存储来存储一棵树呢?在顺序存储时,我们除了存储每个结点值外,还要存储树中结点与结点之间的逻辑关系(即双亲与孩子结点之间的关系).下面介绍树的双亲存储法. ...
- (数据结构)树的双亲表示法
树的双亲表示法 此前写过二叉树的顺序存储和链式存储,此篇文章将介绍普通树是如何存储的... 通常,存储具有普通树结构数据的方法有 3 种: 双亲表示法 孩子表示法 孩子兄弟表示法 而本篇文章将优先介绍 ...
- 使用双亲指针表示法存储一棵树,可以方便解决下列哪个应用问题( )
使用双亲指针表示法存储一棵树,可以方便解决下列哪个应用问题( C ) A. 最短路径 B. 树的遍历 C. 等价类 D. 优先级队列 等价类问题通过并查集算法实现. 等价类采用存储结构为双亲节点表示法 ...
- 【数据结构笔记08】哨兵查找、二分查找、树、儿子-兄弟表示法、二叉树的引子
本次笔记内容: 3.1.1 引子(顺序查找) 3.1.2 引子(二分查找例子) 3.1.3 引子(二分查找实现) 3.1.4 树的定义和术语 3.1.5 树的表示 文章目录 树的引子:查找 查找(Se ...
- js 数组 实现 完全树_算法和数据结构 | 树状数组(Binary Indexed Tree)
本文来源于力扣圈子,作者:胡小旭.点击查看原文 力扣leetcode-cn.com 树状数组或二叉索引树(英语:Binary Indexed Tree),又以其发明者命名为 Fenwick 树.其初 ...
- 数据结构——树状数组
我们今天来讲一个应用比较广泛的数据结构--树状数组 它可以在O(nlogn)的复杂度下进行单点修改区间查询,下面我会分成三个模块对树状数组进行详细的解说,分别是树状数组基本操作.树状数组区间修改单点查 ...
- Kiner算法刷题记(二十一):字典树与双数组字典树(数据结构基础篇)
字典树与双数组字典树(数据结构基础篇) 系列文章导引 系列文章导引 开源项目 本系列所有文章都将会收录到GitHub中统一收藏与管理,欢迎ISSUE和Star. GitHub传送门:Kiner算法算题 ...
最新文章
- 学编程当中最重要的三点,一些很正经的建议
- 爬虫 - requests模块
- 数据库中char varchar nchar nvarchar的区别
- 环球网-王坚《在线》:用20万字讲清楚三个词
- C#LeetCode刷题之#852-山脉数组的峰顶索引(Peak Index in a Mountain Array)
- JS数据结构初识(一)-栈
- Go 使用 JSON
- Solr如何管理索引库
- Jmeter工具使用-分布式架构和服务器性能监控解决方案
- DELL-S4810恢复出厂配置
- vertical-align的使用及解决图片底部默认空白缝隙问题和图像与文本垂直方向居中对齐
- C语言学习 7-9 统计素数并求和
- 海军领域搜狗细胞词库
- Kindle4rss中文rss资源推荐~
- Redis 微博微信场景使用案例
- ueditor 前后端分离+图片上传
- 国漫的又一次崛起?形成独树一帜的“中国学派”
- 如何将河道水系CAD数据导入HEC-RAS中?详细教程!
- 转:安迪·格鲁夫:你无法避免开会,但可以让它更有效率
- jQuery参考手册
热门文章
- littlevgl教程 Linux,树莓派littlevGL系列教程:容器控件(lv_cont)
- 简易的共享交通系统管理系统
- 读书笔记—《销售铁军》随记6
- 利用Flash制作一个可以自由拨动的时钟模具
- CCS_3.3.83.20的安装步骤
- object标签属性详解
- **opencv331install_path**
- 归置归置,我的 2022
- position属性与z-index属性详解,如何比较z-index值确定覆盖关系,为何z-index属性不生效。
- Docker-安装部署全过程