2012-04-10 65 views
0

我有每个节点3个数据的二进制树功能。他们按ID号分类。他们还举办“姓名”和“标记”二叉搜索树和数据与Python

我遇到的是一个名字搜索功能问题有一定的功能,它看起来像这样:

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空闲中输入findName(tree['right'],name),那么如果名称在树中,则会变为true。

回答

3

一个函数实际返回一些数据的唯一方法,就是如果它本身采用了return声明。您的else:套件不包含任何return陈述。

+0

首先我喜欢用户名。 :P和是的,我认为,因为它是递归的,它会返回True。谢谢。 – Unknown 2012-04-10 22:17:36

3

对否则你将不得不做这样的事情:

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

,以使其搜索在两个分支,如果它发现它在任何这些分支的返回值将是真正的

0

我相信有开源的二叉搜索树模块可用;如果你的目标是要了解BST的,尽一切办法写你自己的,但如果你正在开发一些适合开源的东西,你可能想尝试一个已经过测试和调试的罐头模块。

我有东西有点像在http://stromberg.dnsalias.org/~strombrg/treap/个面向Python的BST。它实际上是一个BST的变体,它不需要以随机顺序将密钥送入BST - 它在每个节点上使用随机值来分散事物。对于程序员来说,它看起来像一本字典,除了当你遍历它们时键被重新排序,并且查找速度不如字典(散列)。

Treaps被发现早在80年代后期,我相信,所以他们是一个相对较新的CS位。他们是一个非常全面的数据结构;您访问相同数据的方式越不同,您越有可能获得更好的效果。

其实,从你所描述的东西,你甚至可能会得到更好的只是一本字典(哈希表)担任其中的键是你的名字。