2012-04-10 70 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位。他們是一個非常全面的數據結構;您訪問相同數據的方式越不同,您越有可能獲得更好的效果。

其實,從你所描述的東西,你甚至可能會得到更好的只是一本字典(哈希表)擔任其中的鍵是你的名字。