我不明白我在哪里犯了错误,以下是创建树的代码,但它从不创建树。我认为make_tree
函数存在一些逻辑错误。
class node:
def __init__(self, a):
self.a=a
self.l=None
self.r=None
class tree:
def __init__(self, a,maxd=5):
self.s=node(a)
self.maxd=maxd
def make_tree(self, n,d=0):
if(self.maxd<d):
return n
else:
n=node(d)
n.a=d
self.make_tree( n.l,d+1)
self.make_tree(n.r,d+1)
return n
t=tree(2)
t.s=t.make_tree(t.s)
print 'children ', (t.s.r!=None), (t.s.l!=None)
输出:
儿童假错误
想要一棵这样的树:
o
/ \
o o
/ \ / \
o o o o
答案 0 :(得分:1)
我认为你期待这条线:
n=node(d)
要做的比在Python中做的更多。该行重新绑定本地名称n
,但它不会更改原始n
值来自调用代码的位置。
我认为你应该完全跳过n
到make_tree
函数并简单地使用它的返回值:
def make_tree(self, d=0):
if d > self.maxd:
return None
n = Node(d)
n.l = self.make_tree(d+1)
n.r = self.make_tree(d+1)
return n
你可以用以下内容来称呼它:
tree.s = tree.make_tree()
当然,make_tree
可以是常规函数而不是方法,因为它只使用self
递归调用自身。