2012-04-10 42 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) 

私はいつもの最初の名前を見つけることができます。彼らはまた、「名前」と「マーク」

と、特定の機能私がいる問題は、関数を検索する名前であるが、それはこのようになります開催しますしかし、私はそれ以上のものを見つけることはできません。私がfindName(tree['right'],name)をpythonアイドルで入力した場合、その名前がツリーにある場合はtrueになります。

答えて

3

関数が実際に一部のデータを返す唯一の方法は、それ自体がreturnステートメントを使用するかどうかです。 else:スイートにreturnステートメントが含まれていません。それは両方のブランチで検索し、それらの枝のいずれかでそれを見つけた場合、戻り値がTrue

+0

まずはユーザー名が大好きです。 :Pとうん、それは再帰的なのでTrueを返すと思った。ありがとうございました。 – Unknown

3

次のような何かをしなければならないでしょうオープンソースのバイナリ検索ツリーモジュールがあると信じています。あなたの目標がBSTのことを学ぶことであれば、ぜひあなた自身で書くことができます。しかし、もしopensourceに敏感な何かに取り組んでいるなら、すでにテストされデバッグされているcannedモジュールを試してみてください。

私はhttp://stromberg.dnsalias.org/~strombrg/treap/にPython用のBSTのようなものがあります。実際にはBSTの変種で、BSTに無作為にキーを送る必要はありません。各ノードのランダムな値を使って物事を分散させます。プログラマーには、それらが反復処理されたときにソートされたキーと、ルックアップが辞書(ハッシュ)と同じくらい速くないという点を除いて、辞書のように見えます。

トレップは80年代後半に発見されたと私は信じています。だから彼らは比較的最近のCSです。彼らは非常によく丸められたデータ構造です。同じデータにアクセスする方法が多ければ多いほど、トレップの方が良いでしょう。

実際には、あなたが説明したことから、キーがあなたの名前である辞書(ハッシュテーブル)だけでよりうまく対応できるかもしれません。

0

Iになるように

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

:他の