最近看了一些公司的面试题,发现涉及 IT技术,包括 AI 行业的题目都会涉及到最基本的 C/C++、数据结构和算法之类的,突发奇想写了一个貌似没啥用的数据结构,就当是复习了 [手工哭笑表情]
1 结构
![](https://img-blog.csdnimg.cn/20210202213107686.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2phY2tfX2xpbnV4,size_16,color_FFFFFF,t_70)
该自定义结构不同于二叉树及其他数据结构,每个节点的子节点个数不受限制,最大限度保留了数据的原始结构,并实现了其前序和后序遍历的方法。优点是节省了内存,但缺点则是基于链表结构查询的时间开销会相对较大。
举个例子,图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类型的指针变量)
![](https://img-blog.csdnimg.cn/20210202214512908.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L2phY2tfX2xpbnV4,size_16,color_FFFFFF,t_70)
程序定义如下:
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。
<