Python - 平面列表树实现:给定 child,得到 parent?
Python - Flat list tree implementation: Given child, get parent?
我正在为一棵树创建一个 python class,其中每个节点都有 "order" 给出的 children 数(但每个 child 只有一个节点)。我有一个方法,children(self,i),它 returns 索引 i 处节点的 children。我需要实现 parent(self, i) ,它将在索引 i 处获得 child 的 parent。
这是我目前的情况:
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 和列表 [45, 2, 123, 1, 8, 40, 456] 表示的示例树如下所示:
45
/ \
2 123
/ \ / \
1 8 40 456
我知道可能有一种方法可以逆转我用于 children(self, i) 的方法,但我不确定如何。
你会做逆运算:
else:
#get parent of node i
return self._tree[(i-1)//self._order]
请注意,您的实现仅适用于二叉树(您 return 两个 children,而不是 n)。像这样更正它:
def children(self, i):
return self._tree[(i*self._order+1):((i+1)*self._order+1)]
我正在为一棵树创建一个 python class,其中每个节点都有 "order" 给出的 children 数(但每个 child 只有一个节点)。我有一个方法,children(self,i),它 returns 索引 i 处节点的 children。我需要实现 parent(self, i) ,它将在索引 i 处获得 child 的 parent。
这是我目前的情况:
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 和列表 [45, 2, 123, 1, 8, 40, 456] 表示的示例树如下所示:
45
/ \
2 123
/ \ / \
1 8 40 456
我知道可能有一种方法可以逆转我用于 children(self, i) 的方法,但我不确定如何。
你会做逆运算:
else:
#get parent of node i
return self._tree[(i-1)//self._order]
请注意,您的实现仅适用于二叉树(您 return 两个 children,而不是 n)。像这样更正它:
def children(self, i):
return self._tree[(i*self._order+1):((i+1)*self._order+1)]