0

我有一个二叉树函数,每个节点中有 3 条数据。它们按身份证号分类。他们还持有“姓名”和“标记”

我遇到的某个功能是名称搜索功能,它看起来像这样:

def findName(tree,name):
    if tree==None:
        return None
    elif tree['name']==name:
        return True
    else:
        findName(tree['right'],name)
        findName(tree['left'],name)

我总是可以在一棵树上找到第一个名字,但我找不到任何以后的名字。如果我findName(tree['right'],name)在 python idle 中输入,如果名称在树中,我会得到 true。

4

3 回答 3

3

函数实际返回一些数据的唯一方法是它本身是否使用return语句。您的else:套件不包含任何return语句。

于 2012-04-10T21:56:04.370 回答
3

在其他方面,您必须执行以下操作:

return findName(tree['right'],name) or findName(tree['left'],name)

以便它在两个分支中搜索,如果在其中任何一个分支中找到它,则返回值将为 True

于 2012-04-10T22:07:42.983 回答
0

我相信有可用的开源二叉搜索树模块;如果您的目标是了解 BST,请务必自己编写,但如果您正在研究适合开源的东西,您可能想尝试一个已经过测试和调试的预制模块。

我在http://stromberg.dnsalias.org/~strombrg/treap/有类似 Python 的 BST 。它实际上是 BST 的一种变体,它不需要以随机顺序将密钥提供给 BST - 它使用每个节点上的随机值来分散事物。对程序员来说,它看起来像一个字典,除了当你迭代它们时,键返回排序,并且查找不如字典(哈希)快。

我相信,Treaps 是在 80 年代后期发现的,所以它们是相对较新的 CS。它们是一个非常全面的数据结构;您访问相同数据的不同方式越多,您就越有可能陷入陷阱。

实际上,根据您的描述,您甚至可以通过字典(哈希表)更好地为您服务,其中键是您的姓名。

于 2012-04-10T22:51:00.207 回答