Python - 平面列表树实现:给定孩子,得到父母?

时间:2017-04-12 20:17:30

标签: python tree n-ary-tree

我正在为一棵树创建一个python类,其中每个节点都有一些由“order”给出的子节点(但每个子节点只有一个节点)。我有一个方法,children(self,i),它返回索引i的节点的子节点。我需要实现父(self,i),它将获得索引为i的子节点的父节点。

这是我到目前为止所拥有的:

class Tree:
  def __init__(self, order=2, l=[]):
    self._tree = l
    self._order = order

  def children(self, i):
    left = self._tree[(i+1)*self._order-1]
    right = self._tree[(i+1)*self._order]
    return [left, right]

  def parent(self, i):
    if i>len(self._tree):
        return ValueError
    elif i==0:
        return None
    else:
        #get parent of node i

order = 2表示的示例树和list [45,2,121,1,8,40,456]如下所示:

      45
    /    \
  2       123
 / \     /   \
1   8   40   456   

我知道可能有一种方法可以改变我用于儿童的方法(自我,我),但我不确定如何。

1 个答案:

答案 0 :(得分:0)

你会做相反的操作:

else:
    #get parent of node i
    return self._tree[(i-1)//self._order]

请注意,您的实现仅适用于二叉树(您返回两个孩子,而不是 n )。像这样纠正:

def children(self, i):
    return self._tree[(i*self._order+1):((i+1)*self._order+1)]