L'algorithme habituel de validation d'un arbre de recherche binaire consiste à vérifier de manière récursive que chaque valeur se situe dans une plage de nombres valides, en divisant cette plage en deux sur chaque noeud.Valider l'arbre de recherche binaire de comparables en un seul passage
Certains échantillons Python pour illustrer l'algorithme (pour les valeurs non-double):
def walker(node, low, high):
if node is None:
return True
if not (low < node.data < high):
return False
return walker(node.left, low, node.data) and walker(node.right, node.data, high)
def checkBST(root):
if root is None:
return True
return walker(root, -2**32, 2**32)
Cela suppose que les valeurs sont des nombres entiers, et qu'ils sont tous à (-2^32, 2^32)
.
Et si je voulais écrire cet algorithme pour un type comparable? Trouver les valeurs les plus petites et les plus grandes dans l'arbre peut être fait en temps linéaire en utilisant un autre passage sur l'arbre, mais y a-t-il un moyen qui ne nécessite pas deux passes complètes?