基本上我希望能够让类型树的每个节点都有一个数据字段和一个分支列表。此列表应包含许多Tree类型的对象。 我想我已经实现了列表的实际实现,但是当我尝试使用getLeaves方法时,我会遇到奇怪的行为。基本上它以递归方式调用自身并且永远不会返回,并且发生的方式是以某种方式树的第二个节点获得它的第一个分支集(我认为)。
class Tree:
"""Basic tree graph datatype"""
branches = []
def __init__(self, root):
self.root = root
def addBranch (self, addition):
"""Adds another object of type Tree as a branch"""
self.branches += [addition]
def getLeaves (self):
"""returns the leaves of a given branch. For leaves of the tree, specify root"""
print (len(self.branches))
if (len(self.branches) == 0):
return self.root
else:
branchSum = []
for b in self.branches:
branchSum += b.getLeaves()
return (branchSum)
答案 0 :(得分:0)
self.root
是所述树的父级吗?在这种情况下,getLeaves()
如果没有分支(self
)而不是len(self.branches)==0
,则应返回self.root
。此外,如果您有子分支,则应在self
中包含branchSum
。
答案 1 :(得分:0)
可能的解决方案(您的源代码稍有更改):
class Tree:
def __init__(self, data):
"""Basic tree graph datatype"""
self.data = data
self.branches = []
def addBranch (self, addition):
"""Adds another object of type Tree as a branch"""
self.branches.append(addition)
def getLeaves (self):
"""returns the leaves of a given branch. For
leaves of the tree, specify data"""
if len(self.branches) == 0:
return self.data
else:
branchSum = []
for b in self.branches:
branchSum.append(b.getLeaves())
return branchSum
## Use it
t0 = Tree("t0")
t1 = Tree("t1")
t2 = Tree("t2")
t3 = Tree("t3")
t4 = Tree("t4")
t0.addBranch(t1)
t0.addBranch(t4)
t1.addBranch(t2)
t1.addBranch(t3)
print(t0.getLeaves())
输出:
[['t2', 't3'], 't4']
说明:
答案 2 :(得分:0)
您的'branches'变量是类成员,而不是实例成员。您需要在构造函数中初始化'branches'实例变量:
class Tree:
"""Basic tree graph datatype"""
def __init__(self, root):
self.branches = []
self.root = root
其余代码看起来不错。