Data structures Julia中的树数据结构

Data structures Julia中的树数据结构,data-structures,julia,Data Structures,Julia,我需要在Julia中实现一个简单(但不是二进制)树。基本上,每个节点都需要一个整数ID,我需要一种方便的方法来获取节点的子节点列表,并通过ID将子节点添加到现有节点 e、 g.0->1->(2->(3,4,5),6) 当每个数字代表一个节点时,我需要函数children(2)和add(7作为4的子节点) 我知道在其他语言中也可以找到类似的树实现,但我对OOP/类/数据结构非常陌生,无法将它们“翻译”为Julia。您没有说明是希望在添加新节点时自动分配ID,还是希望在添加子节点时指定ID(这将涉及

我需要在Julia中实现一个简单(但不是二进制)树。基本上,每个节点都需要一个整数ID,我需要一种方便的方法来获取节点的子节点列表,并通过ID将子节点添加到现有节点

e、 g.0->1->(2->(3,4,5),6)

当每个数字代表一个节点时,我需要函数children(2)和add(7作为4的子节点)


我知道在其他语言中也可以找到类似的树实现,但我对OOP/类/数据结构非常陌生,无法将它们“翻译”为Julia。

您没有说明是希望在添加新节点时自动分配ID,还是希望在添加子节点时指定ID(这将涉及某种形式的更复杂的查找)。 如果可以分配ID,则可以实现如下树结构:

type TreeNode
    parent::Int
    children::Vector{Int}
end
type Tree
    nodes::Vector{TreeNode}
end
Tree() = Tree([TreeNode(0, Vector{Int}())])
function addchild(tree::Tree, id::Int)
    1 <= id <= length(tree.nodes) || throw(BoundsError(tree, id))
    push!(tree.nodes, TreeNode(id, Vector{}()))
    child = length(tree.nodes)
    push!(tree.nodes[id].children, child)
    child
end
children(tree, id) = tree.nodes[id].children
parent(tree,id) = tree.nodes[id].parent
类型树节点
父::Int
子::向量{Int}
结束
类型树
节点::向量{TreeNode}
结束
Tree()=树([TreeNode(0,向量{Int}())]))
函数addchild(树::树,id::Int)

1树可以看作是有向图的一种特殊情况。有向图依次在
图.jl
LightGraphs.jl
中实现。但是,可能某些专用数据结构更好。有没有任何原因会比专用数据结构慢?也就是说,除了第一次编译
图.jl
。谢谢,这很有帮助。我后来意识到,我永远不需要向树中添加新的子节点,只需要将它们重新分配到其他节点,但这似乎可以通过对
addchild()的一个小更改来实现
节点
成为
Dict
会更好吗?添加/删除/修改树结构会更容易/更便宜。
Dict
与简单向量相比可能非常昂贵。例如,您可以通过将父节点设置为-1,在上述结构中标记已删除的
树节点
并检查在阅读时,删除一个节点会很容易。但这实际上取决于用例。正如我在回答中所说的,如果分配了ID,那么您将希望使用
Dict{Int,TreeNode}