【发布时间】:2017-04-13 13:25:22
【问题描述】:
我正在为一棵树创建一个 python 类,其中每个节点都有 n 个子节点(但每个子节点只有一个节点)。我需要实现两种方法,预购和后购。我被困在预订中。
这是我目前所拥有的:
class KTree:
def __init__(self, n, lst = []):
self._tree = lst
self._n = n
def children(self, i):
tree = self._tree
n = self._n
result = []
for k in range(n*i+1, n*i+n+1):
if k<len(tree):
result.append(tree[k])
else:
pass
return result
def child_indices(self, i):
#returns list of the indices of the children of i
tree=self._tree
n = self._n
result=[]
for k in range(n*i+1, n*i+n+1):
if k<len(tree):
result.append(k)
return result
def parent(self, i):
tree = self._tree
n = self._n
result = (i-1)//n
return tree[result]
def pre_order(self):
result=[]
stack = []
stack.append(0)
k=0
while k<len(stack):
result.append(self._tree[stack[k]])
for index in self.child_indices(k):
stack.append(index)
k+=1
return result
对于树[20, 2, 123, 1, 5, 4, 438](如下图,我认为preorder的输出应该是[20, 2, 1, 5, 123, 4, 438]。我目前的代码是输出[20, 2, 123, 1, 5, 40, 438]。
20
/ \
2 123
/ \ / \
1 5 4 438
【问题讨论】: