【发布时间】:2011-02-17 13:31:02
【问题描述】:
我和我的朋友正在做一些使用 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”,这很奇怪。
【问题讨论】:
-
我认为您在拥有 Treenode 实例和拥有 Bintree 实例之间感到困惑。例如,您的程序中的某些东西有一个属性
item,它是一个字符串,而有些东西有一个item,它是一个树节点。尝试将 Bintree 中的名称item更改为node之类的其他名称,然后当您尝试在您认为是Treenode但实际上是 Bintree 的对象上打印item属性时,您可能会开始遇到有意义的错误。 -
好吧,None 代替 True 似乎是一个简单的解决方法。 exists() 的最后一行应该是“return True”。
标签: python printing binary-tree inorder