comment pourrais-je faire cela? Je ne suis pas sûr quand j'arrêterais la recherche de bst.trouver tous les nombres inférieurs à x dans un BST
Répondre
Si chaque nœud de votre arbre a un champ numLeft
qui vous indique le nombre de nœuds, il y a dans son sous-arbre gauche (lui-même compter aussi), alors vous pouvez le faire dans O(log N)
Il suffit de continuer à ajouter numLeft
à un monde variable de résultat pour chaque nœud dont la valeur est inférieure à x
:
countLessThan(int x, node T)
if T = null
return
if T.value >= x
countLessThan(x, T.left) // T.left contains only numbers < T.value and T.right only numbers > T.value
else
globalResult += T.numLeft
countLessThan(x, T.right)
Cela ne comptera que les chiffres. Si vous voulez les imprimer, vous devez écrire une première traversée en profondeur qui imprimera une sous-arborescence donnée en paramètre. Vous pouvez trouver beaucoup de ceux en ligne, donc je ne vais pas poster cela.
Vous ne savez pas si c'est exactement ce que vous recherchez ou non, mais les algorithmes d'arborescence de recherche binaire sont classiques et Internet en regorge. http://www.algolist.net/Data_structures/Binary_search_tree/Lookup - devrait au moins vous mettre dans la bonne direction (vous voudriez modifier la condition 'found' et retourner une 'collection' au lieu d'une bool).
Si vous avez besoin d'une liste de numéros, vous devrez quand même traverser l'arborescence. Pour BST, vous pouvez faire le déplacement du plus bas au plus haut.
Mais si vous avez besoin sous-arbre qui représente chiffres les plus bas:
def splitLowerTree(x, node):
if node is None: return None
elif node.value == x: return node.left
elif node.value < x:
if node.right is None: return node
else: return Node(node.value, left = node.left, right = splitLowerTree(x, node.right))
else: return splitLowerTree(x, node.left)
- 1. Générer k nombres distincts inférieurs à n
- 2. Trouver tous les éléments dans BST satisfaisant f en utilisant les suites de succès dans SML
- 3. Optimiser le code Haskell en calculant la somme de tous les nombres premiers inférieurs à deux millions
- 4. Comment trouver tous les nombres correspondants, qui somme à 'N' dans un tableau donné
- 5. Trouver deux nombres dans un arbre de recherche binaire qui s'ajoutent à un troisième nombre
- 6. traiter les doublons dans un bst
- 7. Ajouter tous les nombres positifs dans Excel
- 8. Rails: Trouver tous les X qui sont assignés à un Y
- 9. Trouver les nombres qui apparaissent le plus dans un vecteur
- 10. somme totale de tous les nombres dans c: boucle forEach
- 11. Pour un nombre donné N je dois trouver tous les nombres premiers qu'il est composé de
- 12. Algorithme pour trouver les 2 plus grands nombres inférieurs à 2 entiers a et b, qui sont divisibles les uns par les autres
- 13. Comment utilisez-vous les requêtes spatiales MySQL pour trouver tous les enregistrements dans le rayon X?
- 14. GRAILS: Trouver tous les enfants un-à-plusieurs auto-référencées
- 15. Les nombres les plus fréquemment répétés dans une énorme liste de nombres
- 16. Trouver tous les tags utilisés
- 17. Trouver tous les noms de classe dans un projet WPF
- 18. Comment trouver tous les fichiers MP3 dans un répertoire?
- 19. MYSQL où x dans tous
- 20. Comment puis-je trouver tous les Guids dans un texte?
- 21. Regex - trouver tous les liens dans un tweet
- 22. Trouver tous les * rendus images * dans un fichier HTML
- 23. Comment supprimer tous les nombres après point dans PHP
- 24. Comment dit-on dans SQL/ActiveRecord, "Trouver tous les enregistrements où l'attribut est nul ou 'x'"?
- 25. Comment trouver tous les cycles d'une chaîne dans Ruby?
- 26. Nombre de noeuds gauches dans BST
- 27. permutations de BST
- 28. trouver inorder successeur en BST sans utiliser d'espace supplémentaire
- 29. .NET - Privilèges d'application inférieurs
- 30. Trouver une séquence de nombres dans un tableau
Je me demande comment pourrais-je modifier la recherche bst pour obtenir le nombre d'éléments moins que x – ryanxu