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

本文介绍了一种自定义数据结构——自然树,它允许节点有任意数量的子节点,适用于保存数据的原始结构。文章详细阐述了自然树的节点结构,包括TNode和Node,并提供了前序和后序遍历的实现。此外,还讨论了插入子节点和兄弟节点的方法,以及删除节点的操作。最后,作者提到该结构适用于面试复习,提供了C和C++的实现代码链接。
摘要由CSDN通过智能技术生成

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

1 结构

图1.1 自然树的整体结构

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

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

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

【注】:Root 用来表示自然树的头节点,其 data 不储存任何有意义的数据,T是指向Root节点的指针,也就是头指针。

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

1.1 节点结构 TNode

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

图1.2 TNode结构

程序定义如下:

struct TNode  	//结点结构
{
	std::string  name;		//结点名称
	TElemType    data;		//结点数据
	TNode 	  	*parent;	//双亲节点指针
	Node 		*child;		//子节点指针
};
typedef TNode * Tree;

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

1.2 链表的节点结构 Node

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

<
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值