我正在为一棵树创建一个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
我知道可能有一种方法可以改变我用于儿童的方法(自我,我),但我不确定如何。
答案 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)]