二进制搜索树和Python数据

时间:2012-04-10 21:54:04

标签: python recursion tree binary-tree binary-search-tree

我有一个二叉树函数,每个节点有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),如果名称在树中,我就会得到。

3 个答案:

答案 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的一个相对较新的部分。它们是一个非常全面的数据结构;你访问相同数据的方式越多,你就越有可能采取行动。

实际上,根据你所描述的内容,你甚至可以通过一个字典(哈希表)更好地服务,其中键是你的名字。