BSTでは、ノードの左側に降順のすべての値は、ノード自体よりも小さい(または後で参照)ノード自体です。同様に、ノードの右側にあるすべての値は、ノードの値(a)よりも大きい(または等しい)です。
一部のBSTは重複する値を許可することを選択する場合があるため、上記の「または等しい」修飾子。
次の例で明らかになります。
|
+--- 14 ---+
| |
+--- 13 +--- 22 ---+
| | |
1 16 +--- 29 ---+
| |
28 29
これは、重複を許可するBSTを示しています。値を見つけるには、ルートノードから始めて、検索値がノード値よりも小さいか大きいかに応じて、左または右のサブツリーに移動します。
これは次のようなもので再帰的に行うことができます:
def hasVal (node, srchval):
if node == NULL:
return false
if node.val == srchval:
return true
if node.val > srchval:
return hasVal (node.left, srchval)
return hasVal (node.right, srchval)
そしてそれを呼び出す:
foundIt = hasVal (rootNode, valToLookFor)
同じ値の他のノードの値が見つかったら、検索を続ける必要がある場合があるため、重複は少し複雑になります。
(a)特定のキーの検索方法を調整したい場合は、実際に逆方向に並べ替えることができます。BSTは、昇順または降順に関係なく、ソートされた順序を維持するだけで済みます。