【问题标题】:Binary Search Trees and Data with Python使用 Python 生成二叉搜索树和数据
【发布时间】:2012-04-10 21:54:03
【问题描述】:

我有一个二叉树函数,每个节点有 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)

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 首先我喜欢这个用户名。 :P 是的,我认为因为它是递归的,所以它会返回 True。谢谢。
    【解决方案2】:

    否则,您必须执行以下操作:

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

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

    【讨论】:

      【解决方案3】:

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

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

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

      实际上,根据您的描述,您甚至可能最好只使用一个字典(哈希表),其中键是您的姓名。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-02-20
        • 1970-01-01
        相关资源
        最近更新 更多