使用 Treelib (Python) 遍历树数据结构

Posted

技术标签:

【中文标题】使用 Treelib (Python) 遍历树数据结构【英文标题】:Iterating through tree datastructure using Treelib (Python) 【发布时间】:2022-01-22 21:21:38 【问题描述】:

我通过 Node 类创建了一些节点,并使用 Treelib 将它们添加到树中。

class Node(object):
    def __init__(self, id, label, parent, type):
        self.id = id
        self.label = label
        self.parent = parent
        self.type = type

node = Node(id, label, parent, type)

if id == 'root':
   tree.create_node(tag=id, identifier=id, data=node)
else:
   tree.create_node(tag=id, identifier=id, parent=parent, data=node)

通过调用 tree.show() 我对树有了一个很好的了解。 现在我想遍历树并获取之前定义的每个节点的数据。 (不只是 tree.show(data_property="") 的单个属性)

您对如何处理定义的数据有任何想法吗?

我的最终目标是像决策树一样计算树结构,到目前为止我还没有找到使用 Treelib 的好方法。

【问题讨论】:

这段代码只创建了一个节点。您能否编辑并提供我们可以运行的示例树的代码? 【参考方案1】:

先说几句:

我会为类 Node 使用不同的名称; TreeLib 也定义了一个 Node 类。 当您使用 TreeLib 时,应该不需要在您自己的类实例中维护父引用。这是 TreeLib 已经为您管理的东西。

您可以使用all_nodes_itr 方法迭代节点,这将在每次迭代中为您提供一个TreeLib Node 实例。然后,您可以访问 TreeLib 属性,例如 identifierparent。对于您自己的属性,访问data 属性,然后访问您要查看的属性(如label

这是一个简化的脚本:

class MyNode(object):
    def __init__(self, id, label):
        self.id = id
        self.label = label


from treelib import Tree
tree = Tree()

def add_node(id, label, parent=None):
    node = MyNode(id, label)
    tree.create_node(tag=id, identifier=id, data=node, parent=parent)

add_node("world", "World")
add_node("north-america", "North America", "world")
add_node("europe", "Europe", "world")

for node in  tree.all_nodes_itr():
    print(node.identifier, node.data.label)

【讨论】:

可以通过parent静态方法获取父级:比如可以访问tree.parent(node.identifier)

以上是关于使用 Treelib (Python) 遍历树数据结构的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 python 中的 treelib 库在树中插入节点?

python实现二叉树遍历(前序遍历中序遍历后序遍历)

在路上---学习篇Python 数据结构和算法 二分查找二叉树遍历

Python—二叉树数据结构

数据结构-二叉树以及前序中序后序遍历(python实现)

Python --- 二叉树的层序建立与三种遍历