Julia中的树数据结构

时间:2016-04-13 09:03:40

标签: data-structures julia

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

e.g。 0→1→(2→(3,4,5),6)

其中每个数字代表一个节点,我需要函数children(2)和add(7作为4的子元素)。

我知道可以为其他语言找到类似的树实现,但我对OOP /类/数据结构很新,而不是设法将它们“翻译”为Julia。

1 个答案:

答案 0 :(得分:7)

您没有说明是否希望在添加新节点时自动分配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

否则,您可能希望使用Dict{Int,TreeNode}来存储树节点。