当前位置: 首页 > news >正文

数据结构第十五天(树的存储/孩子表示法)

目录

前言

概述

接口

源码

测试函数

运行结果

往期精彩内容


前言

最近在知乎上看到的一个问题,

也许,短暂的离别,只为更好的相遇!

2024,友友们,龙年快乐,新的一年,祝愿码上升薪,一头黑发无烦恼。

概述

树的存储孩子表示法是一种常见的树的存储方式,也被称为多重链表表示法。这种方式是通过记录每个节点的所有子节点来实现的。

具体地,对于每个节点,它的所有子节点都被保存在一个链表中,这个链表中的每个元素都指向该节点的一个子节点。如果节点没有子节点,则该链表为空。同时,该节点还需要保存它的父节点的指针,以便能够在需要时回溯到父节点。

这种方式的优点在于可以快速访问任意节点的子节点,因为每个节点的子节点都被直接存储在链表中,不需要遍历整个树来查找。同时,也可以方便地插入和删除节点,只需要修改相应的链表即可。

然而,这种方式也有一些缺点。首先,它需要额外的空间来保存每个节点的子节点链表和父节点指针,空间占用较大。其次,由于每个节点的子节点链表是无序的,因此在查找特定子节点时可能需要遍历整个链表才能找到目标节点,效率较低。

总而言之,树的存储孩子表示法是一种简单且易于实现的树结构存储方式,它适用于小规模的树和需要快速访问子节点的场景。

接口

    void addNode(char* data);void addChild(char* parent, char* child);void getChild(char* parent);

源码

#include <malloc.h>
#include<string.h>
#include<iostream>
using namespace std;
class TREECHILD
{
private:struct DATA{char data[15];struct DATA* next;struct DATA* child;};struct DATA* head = nullptr, *tail = nullptr;
private:struct DATA* getPtrOfData(char* data);
public:TREECHILD(){head = tail = (struct DATA*)malloc(sizeof(struct DATA));}void addNode(char* data);void addChild(char* parent, char* child);void getChild(char* parent);
};
struct TREECHILD::DATA* TREECHILD::getPtrOfData(char* data)
{struct DATA* ptr = head;while (ptr != nullptr){if (strcmp(data, ptr->data) == 0){return ptr;}ptr = ptr->next;}return nullptr;
}
void TREECHILD::getChild(char* parent)
{struct DATA* ptr = getPtrOfData(parent);ptr = ptr->child;while (ptr != nullptr){cout << ptr->data << endl;ptr = ptr->child;}return ;
}
void TREECHILD::addNode(char* data)
{strcpy(tail->data, data);tail->next = (struct DATA*)malloc(sizeof(struct DATA));tail->child = nullptr;tail = tail->next;tail->next=nullptr;return;
}
void TREECHILD::addChild(char* parent, char* child)
{struct DATA* parentPtr = getPtrOfData(parent);if (parentPtr->child == nullptr){parentPtr->child = (struct DATA*)malloc(sizeof(struct DATA));strcpy(parentPtr->child->data, child);parentPtr->child->child = nullptr;parentPtr->child->next = nullptr;}else{struct DATA* ptr = nullptr;ptr = parentPtr->child;parentPtr->child = (struct DATA*)malloc(sizeof(struct DATA));strcpy(parentPtr->child->data, child);parentPtr->child->child = ptr;parentPtr->child->next = nullptr;}return;
}

 以下为测试用例:

测试函数

#include<stdio.h>
#include<iostream>
using namespace std;
#include"TREE(child express).h"//(树存储孩子表示法头文件)
#include<windows.h>
int main()
{
//树表示法(孩子表示法)测试TREECHILD treeChild;//创建树的节点treeChild.addNode("A");treeChild.addNode("B");treeChild.addNode("C");treeChild.addNode("D");treeChild.addNode("E");treeChild.addNode("F");treeChild.addNode("G");treeChild.addNode("H");treeChild.addNode("I");treeChild.addNode("J");//添加孩子链表treeChild.addChild("A", "B");treeChild.addChild("A", "C");treeChild.addChild("B", "D");treeChild.addChild("D", "G");treeChild.addChild("D", "H");treeChild.addChild("D", "I");//输出孩子cout << "输出A的孩子:" << endl;treeChild.getChild("A");cout << "输出B的孩子:" << endl;treeChild.getChild("B");cout << "输出D的孩子:" << endl;treeChild.getChild("D");system("pause");return 0;
}

运行结果

相关文章:

  • C语言中在main函数之后运行的函数
  • Acwing 5468. 最有价值字符串【挖掘性质+分类讨论】
  • CVE-2018-19518 漏洞复现
  • 搜索二维矩阵[中等]
  • 【Linux】Linux下的基本指令
  • Android AOSP源码研究之万事开头难----经验教训记录
  • C++学习Day03之new和delete使用
  • 如何实现视线(目光)的检测与实时跟踪
  • JavaGuide
  • Huggingface上传模型
  • C# CAD交互界面-自定义面板集-添加快捷命令(五)
  • three.js 箭头ArrowHelper的实践应用
  • Peter算法小课堂—单调队列
  • SQL Server数据库日志查看若已满需要清理的三种解决方案
  • C#系列-C#操作UDP发送接收数据(10)
  • 时间复杂度分析经典问题——最大子序列和
  • 实现windows 窗体的自己画,网上摘抄的,学习了
  • 11111111
  • Angular数据绑定机制
  • IDEA 插件开发入门教程
  • JavaScript设计模式与开发实践系列之策略模式
  • Js基础知识(一) - 变量
  • JS字符串转数字方法总结
  • Mithril.js 入门介绍
  • MySQL用户中的%到底包不包括localhost?
  • Phpstorm怎样批量删除空行?
  • SAP云平台里Global Account和Sub Account的关系
  • SQLServer之索引简介
  • TCP拥塞控制
  • ⭐ Unity 开发bug —— 打包后shader失效或者bug (我这里用Shader做两张图片的合并发现了问题)
  • vue:响应原理
  • 闭包,sync使用细节
  • 后端_ThinkPHP5
  • 基于组件的设计工作流与界面抽象
  • 前端存储 - localStorage
  • Nginx实现动静分离
  • 扩展资源服务器解决oauth2 性能瓶颈
  • ​​​​​​​​​​​​​​Γ函数
  • ​一、什么是射频识别?二、射频识别系统组成及工作原理三、射频识别系统分类四、RFID与物联网​
  • ###STL(标准模板库)
  • (007)XHTML文档之标题——h1~h6
  • (51单片机)第五章-A/D和D/A工作原理-A/D
  • (ZT)薛涌:谈贫说富
  • (附源码)php新闻发布平台 毕业设计 141646
  • (附源码)ssm捐赠救助系统 毕业设计 060945
  • (利用IDEA+Maven)定制属于自己的jar包
  • (七)Knockout 创建自定义绑定
  • (四)c52学习之旅-流水LED灯
  • (一)Neo4j下载安装以及初次使用
  • (一一四)第九章编程练习
  • (已解决)什么是vue导航守卫
  • (转)Linux整合apache和tomcat构建Web服务器
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .NET DataGridView数据绑定说明