Arbre Binaire Insérer Algorithme
J'ai récemment terminé la mise en œuvre d'un arbre de recherche Binaire pour un projet sur lequel je travaillais. Ça s'est bien passé et j'ai beaucoup appris. Cependant, maintenant, j'ai besoin de mettre en œuvre régulière d'un Arbre Binaire... ce qui m'a déconcerté.
Je suis à la recherche d'un moyen de faire de mon InsertNode fonction..
normalement, dans un BST que vous venez de vérifier si les données < racine puis insérez la gauche et vice-versa. Cependant, Dans un arbre Binaire, c'est juste rempli de gauche à droite, d'un niveau à un moment..
quelqu'un pourrait-il m'aider à mettre en œuvre une fonction qui ajoute un nouveau Nœud de l'arbre Binaire de gauche à droite dans aucun ordre particulier?
Voici mon Insert pour un BST:
void Insert(Node *& root, int data)
{
if(root == nullptr)
{
Node * NN = new Node;
root = NN;
}
else
{
if(data < root->data)
{
Insert(root->left, data);
}
else
{
Insert(root->right, data);
}
}
}
La droite. C'est là que je suis bloqué, si, je ne vois pas le moyen de le faire simplement...
dois-je viens de changer la < > vérification pour voir si ils sont Nuls?
A ma réponse vous aider avec le problème? Est-il autre chose que tu aimerais m'étendre sur?
OriginalL'auteur Taylor | 2013-05-19
Vous devez vous connecter pour publier un commentaire.
Je suis conscient du fait que c'est une question posté il y a quelques temps, mais je voulais quand même partager mes pensées sur elle.
Ce que je voudrais faire (puisque ce n'est en effet pas très bien documenté) est l'utilisation d'un large éventail de la Première Recherche (à l'aide d'une file d'attente) et insérer l'enfant dans la première null je rencontre. Cela permettra d'assurer que votre arbre va se remplir d'abord avant qu'il ne passe à un autre niveau. Avec le bon nombre de nœuds, il sera toujours complet.
Je n'ai pas travaillé beaucoup avec le c++, donc, pour être sûr que c'était correct, je l'ai fait en Java, mais vous voyez l'idée:
OriginalL'auteur bknopper
Javascript mise en œuvre (copier-coller prêt pour votre console web):
ES6 mise en œuvre (plus récente javscript syntaxe avec mot-clé class)
Pseudoclassical modèle de mise en œuvre
OriginalL'auteur cacoder
J'ai pris bknopper code, modifié un peu traduits et C++. Comme il l'a dit, de façon surprenante, ce n'est pas bien documentée.
Ici est le nœud de la structure et de la fonction insérer:
Vous appelez cela de cette façon:
inserta(&root, val);
Être root un pointeur vers le nœud struct et val la valeur de l'entier que vous souhaitez insérer.
Espère que cela aide quelqu'un.
OriginalL'auteur 0aps
Avec quelques modifications de votre code, j'espère que cela permettra :
Par conséquent , cette fonction renvoie le nœud racine de la mise à jour du BST.
OriginalL'auteur Pratik Nagelia
Vous devez essayer d'utiliser une approche récursive tels que x = nouveau (x), si vous savez ce que cela signifie. De cette façon, vous n'avez pas vraiment à vous soucier du nœud racine. Je vais écrire quelques pseudo-code pour vous:
J'ai fait un tutoriel concernant la mise en œuvre d'un BST en C++, ici
OriginalL'auteur devjeetroy