我有一个二叉树函数,每个节点有3个数据。它们按ID号分类。他们还持有“姓名”和“马克”
我遇到问题的某个功能是名称搜索功能,它看起来像这样:
def findName(tree,name):
if tree==None:
return None
elif tree['name']==name:
return True
else:
findName(tree['right'],name)
findName(tree['left'],name)
我总能找到树中的名字,但我找不到任何一个名字。如果我在python idle中输入findName(tree['right'],name)
,如果名称在树中,我就会得到。
答案 0 :(得分:3)
函数实际返回某些数据的唯一方法是它本身是否使用return
语句。您的else:
套件不包含任何return
语句。
答案 1 :(得分:3)
在其他地方,您必须做以下事情:
return findName(tree['right'],name) or findName(tree['left'],name)
以便它在两个分支中搜索,如果它在任何一个分支中找到它,则返回值为True
答案 2 :(得分:0)
我相信有可用的开源二进制搜索树模块;如果您的目标是了解BST,请务必编写自己的BST,但如果您正在开发适合开源的东西,您可能想尝试一个已经过测试和调试的固定模块。
我在http://stromberg.dnsalias.org/~strombrg/treap/处有类似于Python的BST。它实际上是BST的变体,它不需要以随机顺序将密钥馈送到BST - 它在每个节点上使用随机值来分散事物。对于程序员来说,它看起来像一个字典,除了在迭代它们时键返回排序,并且查找不像字典(哈希)那么快。
我相信,80年代后期发现了Treaps,所以它们是CS的一个相对较新的部分。它们是一个非常全面的数据结构;你访问相同数据的方式越多,你就越有可能采取行动。实际上,根据你所描述的内容,你甚至可以通过一个字典(哈希表)更好地服务,其中键是你的名字。