Je comprends la structure des arbres binaires et comment les traverser. Cependant, j'ai du mal à réaliser leurs utilisations réelles, leurs buts dans les programmes et la programmation. Quand je pense à des exemples «réels» de données hiérarchiques, ils ont presque certainement plus de 2 enfants. Par exemple, dans un arbre généalogique, une mère peut souvent avoir plus de deux enfants.
Les «arbres binaires» ne sont-ils vraiment utiles que pour stocker des données liées linéairement en raison des temps de traitement plus rapides sur les tableaux et les listes? Alternativement, servent-ils un objectif spécifique dans le stockage des données hiérarchiques? Si oui, quels sont les exemples d'application des arbres binaires. Quelles données sont telles qu'un nœud a au plus 2 enfants?
la source
Réponses:
Non, les arbres binaires ne sont pas destinés à stocker des données hiérarchiques dans le sens auquel vous pensez. Le principal cas d'utilisation des arbres n-aires, où
n
est un nombre fixe, est la capacité de recherche rapide , et non une hiérarchie sémantique.Rappelez-vous l'ancien jeu où une personne pense à un nombre compris entre 1 et 100, et l'autre doit le deviner en aussi peu de suppositions que possible, et si vous vous trompez, la personne qui pense au nombre doit vous dire si vous êtes trop haut ou trop bas? Cela devient ennuyeux après un certain temps parce que vous comprenez rapidement que vous devriez toujours commencer à 50, puis aller à 25 ou 75, et continuer à diviser la plage à rechercher en deux à chaque nouvelle supposition après cela, et finalement vous pouvez deviner n'importe quel nombre en au plus 7 suppositions, c'est garanti.
Cela peut ne pas être un jeu amusant, mais cette propriété rend les arbres binaires (et autres n-aires) utiles: vous pouvez les utiliser pour rechercher un très grand ensemble de données en très peu de temps.
la source
Toute structure arborescente, où un nœud peut avoir un nombre illimité d'enfants, peut être implémentée à l'aide d'un arbre binaire.
Pour chaque nœud de votre arborescence, remplacez-le par un nœud avec un pointeur droit et gauche. Le pointeur gauche va au premier des enfants du nœud. Le nœud droit va au frère suivant du nœud. Tous les enfants d'un nœud donné sont dans une liste chaînée jointe par leur pointeur droit, le début de la liste pointé par le pointeur gauche de leur parent.
Votre arbre n-aire compliqué est devenu un arbre binaire simple.
Je suis sûr que c'est dans Knuth, Vol. 1 quelque part.
la source
Les arbres binaires pourquoi les utiliser?
En programmation, vous travaillez beaucoup avec des collections de données de même type.
Les deux méthodes de base de stockage de ces données sont: les listes liées et les tableaux.
Ils ont tous deux des avantages et des inconvénients: dans une liste chaînée, il est facile d'ajouter des éléments à n'importe quelle position ou de supprimer des éléments. Mais l'accès à un élément spécifique est plus difficile, car vous devez parcourir la liste jusqu'à ce que vous soyez à l'élément souhaité.
Avec un tableau, l'accès à un élément spécifique est facile, mais il est plus difficile d'insérer ou de supprimer un élément car l'insertion signifie: étendre le tableau d'un, déplacer tous les éléments avant la position d'insertion 1 vers la droite et insérer l'élément.
Ainsi, la liste liée et le tableau ont tous deux des inconvénients.
Les arbres binaires sont conçus pour résoudre à la fois les problèmes du tableau et de la liste liée:
Les arbres binaires sont donc faits pour quand vous avez beaucoup de données qui changent régulièrement.
la source