python 的二叉树
Binary tree with python
我不明白我哪里出错了,下面是创建树的代码,但它从来没有创建树。我认为 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)
输出:
children False False
想要一棵这样的树:
o
/ \
o o
/ \ / \
o o o o
我想你在期待这条线:
n=node(d)
比 Python 做得更多。该行重新绑定本地名称 n
,但它不会更改原始 n
值在调用代码中的来源。
我认为您应该完全跳过将 n
传递给 make_tree
函数,而是简单地使用它的 return 值:
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
递归调用自己。
我不明白我哪里出错了,下面是创建树的代码,但它从来没有创建树。我认为 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)
输出:
children False False
想要一棵这样的树:
o
/ \
o o
/ \ / \
o o o o
我想你在期待这条线:
n=node(d)
比 Python 做得更多。该行重新绑定本地名称 n
,但它不会更改原始 n
值在调用代码中的来源。
我认为您应该完全跳过将 n
传递给 make_tree
函数,而是简单地使用它的 return 值:
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
递归调用自己。