0

各ノードに3つのデータを持つ二分木関数があります。それらはID番号によって分類されます。「名前」と「マーク」もあります

私が問題を抱えている特定の関数は名前検索関数です、それは次のようになります:

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になります。

4

3 に答える 3

3

それ以外の場合は、次のようにする必要があります。

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

両方のブランチで検索し、それらのブランチのいずれかで見つかった場合、戻り値は True になります

于 2012-04-10T22:07:42.983 に答える
3

関数が実際に何らかのデータを返す唯一の方法は、それ自体がreturnステートメントを使用する場合です。else:スイートにはステートメントが含まれていませんreturn

于 2012-04-10T21:56:04.370 に答える
0

オープンソースの二分探索木モジュールが利用できると思います。あなたの目標が BST について学ぶことである場合は、必ず自分で作成してください。ただし、オープンソースに適したものに取り組んでいる場合は、既にテストおよびデバッグされている既製のモジュールを試してみてください。

http://stromberg.dnsalias.org/~strombrg/treap/に Python 用の BST のようなものがあります。実際には、キーをランダムな順序で BST に供給する必要のない BST の変形です。各ノードでランダムな値を使用して物事を分散させます。プログラマーにとっては、キーを反復処理したときにキーがソートされて返されることを除けば辞書のように見え、検索は辞書 (ハッシュ) ほど高速ではありません。

Treaps は 80 年代後半に発見されたので、比較的最近の CS だと思います。それらは非常にバランスの取れたデータ構造です。同じデータにさまざまな方法でアクセスすればするほど、危険にさらされる可能性が高くなります。

実際、あなたが説明したことから、キーがあなたの名前である辞書 (ハッシュ テーブル) だけで十分に機能する可能性があります。

于 2012-04-10T22:51:00.207 に答える