实现自定义的数据结构 —— 树

本文介绍了如何实现一个自定义的树数据结构,不同于传统的二叉树,该结构允许节点有任意数量的子节点。文章详细讲解了节点结构、链表结构、前序和后序遍历、插入子节点和兄弟节点的操作,以及删除节点的算法。代码以C语言为主,部分使用C++语法,适合复习数据结构和算法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

        最近看了一些公司的面试题,发现涉及 IT技术,包括 AI 行业的题目都会涉及到最基本的 C/C++、数据结构和算法之类的,突发奇想写了一个貌似没啥用的数据结构,就当是复习了 [手工哭笑表情]

1 结构

图1.1 自定义树的整体结构

        该自定义结构不同于二叉树及其他数据结构,每个节点的子节点个数不受限制,最大限度保留了数据的原始结构,并实现了其前序和后序遍历的方法。优点是节省了内存,但缺点则是基于链表结构查询的时间开销会相对较大。当然二者不可兼得

举个例子,图1.1所示,即是该自定义树的一种结构

1.1左边是一种直观的结构,Root为树的根节点,其子节点包括 A、B、C,节点 A 的子节点为 D,节点 B 的子节点为 E、F

【注】:根节点 Root 仅用来表示树自身,其 data 不储存任何数据

        而图1.1右边则是程序中的结构,为此设计了两种子结构 TNode 和 Node,TNode 用于表示树的节点信息,而 Node 则用于构成链表,组成某节点的子节点集合

1.1 节点结构 TNode

        如图1.2所示包括4种数据类型:(1)节点的名称 name、(2)数据 data、(3)双亲节点指针 parent、(4)子节点指针 child。data用于储存该节点的数据,parent 节点指针用于向上层查找,child 节点用于向下层查找。(图中灰色块表示普通变量,蓝色块表示指针变量)

图1.2 TNode结构

程序定义如下:

typedef struct TNode  //结点结构
{
	char         *name;		//结点名称 
	TElemType    data;		//结点数据
	struct TNode *parent;	                //双亲节点指针 
	LinkList     child;		//子节点指针 
}TNode, *Tree;

【注】:name为节点的标识符(等同于 ID 标记),根据名称长度分配不同大小的动态内存不可重复,TElemType为节点包含的数据类型,作者定义为 int,根据实际需要修改。

1.2 链表的节点结构 Node

         如图1.3所示包括4种数据类型:(1)指向TNode节点的指针 tNode、(2)前一个链表节点的指针 pre、(3)下一个链表节点的指针 next。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值