python - 如何从 Python 中的给定节点列表创建简单的非二叉树
问题描述
我想这对于有经验的人来说是一个相当简单的问题。这是我第一次学习树结构,所以并不简单。问题如下:
给出一个包含 n 个元素的列表,如下所示:
4 -1 4 1 1
这与 n 大小列表的索引有关:
4 -1 4 1 1(父)
0 1 2 3 4(节点)
本质上,树需要创建在节点的值具有高于它的父节点的位置。如果一个节点的父节点值为-1,则该节点是根节点。
所以上面的树应该是这样的:
根 1,他的孩子是
3(没有孩子)和
4(有孩子 0 和 2)。
之后我需要使用一个简单的深度优先算法来确定树的深度,这个算法的输入是实际的树。说明提到我可以在列表中构建一棵树。现在我完全迷失了,因为我不知道使用哪种结构来构建树以及如何使用它?它应该是一个列表吗?还是一堂课?最终树是包含所有孩子的列表,还是包含所有孩子实例的类的实例?这是我的主要问题,之后我认为我能够实现深度算法。
解决方案
好的,所以我想通了,我为节点创建了一个类和一个将这些类实例(实际节点)存储到数组中的函数。每个节点的索引是节点的实际值,每个节点都有存储它的子节点的变量。最后,该函数返回根节点,该根节点已将所有其他节点存储为其后代。现在这个新创建的函数 createTree 可用于创建树并遍历它或确定其深度或任何需要。
class Node():
def __init__(self,name):
self.children = []
self.name = name
def addChild(self, child):
self.children.append(child)
def returnChildren(self):
return self.children
def getName(self):
return self.name
def createTree(elements):
list_of_nodes = []
for i in range(len(elements)):
list_of_nodes.append(Node(i))
for i in range(len(elements)):
if elements[i] == -1:
root = list_of_nodes[i]
else:
list_of_nodes[elements[i]].addChild(list_of_nodes[i])
return root
推荐阅读
- javascript - 使用 Service Worker 反应应用程序 - 在新版本上强制更新浏览器缓存
- excel - 无法单击/排除/通过 ok 上的 javascript 警报出现在使用 excel VBA 的网页中
- arrays - 我怎样才能避免电脑选择相同的号码?
- c++ - 如何编写一个函数版本来获取指针类型?
- r - 如何使用 Pipr 在 R 的计数函数中使用月份索引
- rest - 如何在 Maximo REST API 中重置对象中的日期属性
- numpy - Networkx 最大独立集重现性
- c++ - c++ 范围视图的惰性组合
- spring-boot - Springboot 独立应用支持 Rest & UI
- javascript - 将多个 html 页面中的元素转换为 javascript