Data structures 数据结构:一个';它与树相似,但不是树

Data structures 数据结构:一个';它与树相似,但不是树,data-structures,graph,Data Structures,Graph,我在C语言中实现了一个数据结构,它基于一系列链表,看起来类似于一棵树,但不足以被称为树,因为理论上它允许循环的存在。以下是节点的基本轮廓: 有一个可识别的根,没有父节点或兄弟 每个节点都包含一个指向其“父节点”、最近的“兄弟节点”和第一个“子节点”的指针 存在没有子节点和兄弟节点的“外部”节点 如何命名这样的数据结构?它不可能是一棵树,因为即使指针被清楚地标记并以不同的方式使用,像父->子->兄弟->父这样的循环也很可能存在。我的问题是:像“父亲”、“孩子”和“兄弟”这样的术语可以在图形的上

我在C语言中实现了一个数据结构,它基于一系列链表,看起来类似于一棵树,但不足以被称为树,因为理论上它允许循环的存在。以下是节点的基本轮廓:

  • 有一个可识别的根,没有父节点或兄弟
  • 每个节点都包含一个指向其“父节点”、最近的“兄弟节点”和第一个“子节点”的指针
  • 存在没有子节点和兄弟节点的“外部”节点
如何命名这样的数据结构?它不可能是一棵树,因为即使指针被清楚地标记并以不同的方式使用,像父->子->兄弟->父这样的循环也很可能存在。我的问题是:像“父亲”、“孩子”和“兄弟”这样的术语可以在图形的上下文中使用,还是只保留给树?经过相当多的研究,我仍然无法澄清这件事


提前谢谢

>我会说你仍然可以称之为树,因为基础是树数据结构。我的主张有优先权:“Patricia Trys”被称为树,即使它们的叶节点可能指向树(创建循环)。我相信还有其他的例子

听起来,您拥有的附加链接本质上只是为了方便,可以隐式确定(而不是显式存储)。通过显式存储它们,您可以在树操作(插入、删除等)上施加额外的不变量,但不会影响底层组织,即树

正是因为您分别命名和处理这些附加链接,所以可以将它们视为树顶部的“覆盖”

最后,如果它对你有用,你怎么称呼它或者它属于什么类别其实并不重要。读了一本像Sedgewick的《C语言中的算法》这样的书,你会意识到有大量的数据结构存在,发明自己的数据结构并没有错

还有一点:树是图的一个特例,所以将它称为图(或在其上使用图算法)也没有什么错