子父集合(一种树)

时间:2017-01-03 14:14:50

标签: python collections tree

我需要某种树集合,它能够存储基本的子父关系和下一个简单的操作:

  • IsParent(thisNode,otherNode)(递归任何级别父级之一
  • IsChild(thisNode,otherNode)(递归其中一个级别的孩子
  • GetLevel(node)获取节点级别。

这个集合应该很快并且可以是不可变的我不需要更改树。有很多树木收集,我不知道我需要什么样的树。

你知道Python中的这样的集合吗?

1 个答案:

答案 0 :(得分:0)

我认为你必须自己写。这很容易

class Tree:

    def __init__(self, data, parent=None):
        self.children = []
        self.parent = parent
        self.data = data

    def add_child(self, data):
        self.children.append(Tree(data, self))

    def has_child(self, target):
        return any(map(lambda x: x.data == target or x.has_child(target), self.children))

    def has_parent(self, target):
        return (self.parent.data == target or self.parent.has_parent(target)) if self.parent else False

我不担心这时的速度。有一些方法可以加快这一点,但像这样的数据结构相对轻量级。如果你确实需要快速的东西,那么你最好的选择是用C语言写它然后用python访问它。这对你的目的来说可能有点过分了。