我和我的朋友在学校里用Python 3.1编程,他们都很困。我们正在编程一个二叉树,它工作得很好,除非我们想以创建一个句子的方式按顺序打印所有节点(按顺序打印的所有单词排成一行)。我们在网上到处寻找关于如何进行的线索,我们已经用这个小东西工作了大约两个小时。任何建议/帮助都会很棒。
我们的程序/二叉树:
class Treenode:
def __init__(self, it = None, le = None, ri = None):
self.item = it
self.left = le
self.right = ri
class Bintree:
def __init__(self):
self.item = None
self.left = None
self.right = None
def put(self, it = None):
key = Treenode(it)
if self.item == None:
self.item = key
return
p = self.item
while True:
if key.item < p.item:
if p.left == None:
p.left = key
return
else:
p = p.left
elif key.item > p.item:
if p.right == None:
p.right = key
return
else:
p = p.right
else:
return
def exists(self, it):
key = it
p = self.item
if p == key:
return True
while True:
if key < p.item:
if p.left == None:
return False
else:
p = p.left
elif key > p.item:
if p.right == None:
return False
else:
p = p.right
else:
return
def isEmpty(self):
if self.item == None:
return True
else:
return False
def printtree (Treenode):
if Treenode.left != None:
printtree (Treenode.left)
print (Treenode.item)
if Treenode.right != None:
printtree (Treenode.right)
当我们运行类似这样的程序时,会得到一种打印结果:“bintree.Treenode object at 0x02774CB0”,这不是我们想要的。
我们使用树运行以下命令:
import bintree
tree = bintree.Bintree()
print(tree.isEmpty()) # should give True
tree.put("solen")
print(tree.isEmpty()) # should give False
tree.put("gott")
tree.put("sin")
tree.put("hela")
tree.put("ban")
tree.put("upp")
tree.put("himlarunden")
tree.put("manen")
tree.put("seglar")
tree.put("som")
tree.put("en")
tree.put("svan")
tree.put("uti")
tree.put("midnattsstuden")
print(tree.exists("visa")) # should give False
print(tree.exists("ban")) # should give True
tree.printtree() # print sorted
最后一行的第二行是“None”,而不是“True”,这是wierd。
print(tree.exists("visa"))
返回None
,因为在exists()
的最后一行中有没有任何值的return
语句(默认为None
)。另外,不应该命名
printtree
参数Treenode
,因为它是现有类的名称,可能会导致混淆。它应该看起来更像:另一件事是调用
printtree
-它是一个函数,而不是Bintree
方法,所以我想您应该调用它printtree(tree)
。使测试更容易的一种方法是使用-assert()-而不是打印内容然后引用代码。
http://docs.python.org/reference/simple_stmts.html#the-assert-statement
如果条件不正确,则会引发错误。我知道这并不能修复你的bug,但让事情变得不那么模棱两可总是有助于调试。
要打印二叉树,如果要打印叶,只需打印值;否则,先打印左子级,然后打印右子级。
相关问题 更多 >
编程相关推荐