数据结构——树 | 孩子双亲数组表示法
采取的是顺序存储结构 数组模式
#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算法算题 ...
最新文章
- 利用Flutter写一个跨平台的果核APP(4)——数据存储
- WPF 与Surface 2.0 SDK 亲密接触 - ScatterView 数据绑定篇
- Python--简单的端口扫描脚本
- POJ 1745 Divisibility DP
- 24 种设计模式之 观察者模式
- [loss]Triphard loss优雅的写法
- [html]window.open 使用示例
- CRF++ Source code reading experience
- 山东大学网络考试的计算机试题及答案,专科 计算机基础 山东大学网络教育考试模拟题及答案.doc...
- win7 专业版 破解教程
- 将一个大写英文字母转换为小写输出 (12 分) - PTA
- GoldenDict启动进入后台 Ubuntu
- ArcGisJS实现地图常用工具条、距离测量和面积测量(非官方实例)
- java 获取天气_获取免费天气(Java抓取百度天气)
- simplify-js 降低曲线拟合使用的点数
- oppo手机在哪看电池寿命
- ensp之 广域网的串口封装协议
- 学习表——受任于败军之际,奉命于危难之间(2.20--2.26)
- 2022-10-11(一、远程命令执行和系统命令执行)
- 操作系统多线程例子--吃水果问题