Trouver le parent d'un nœud dans un arbre Binaire
Je suis en train d'écrire une méthode pour trouver le parent d'un nœud donné. Voici ma méthode.
J'ai créé un BinaryNode
objet r qui, initialement, se réfère à la racine.
public BinaryNode r=root;
public BinaryNode parent(BinaryNode p){
BinaryNode findParent=p;
if (isRoot(findParent) || r==null){
return null;
}
else{
if(r.left==findParent || r.right==findParent)
return r;
else{
if (r.element<findParent.element)
return parent(r.right);
else
return parent(r.left);
}
}
}
Ce code ne fonctionne pas correctement .Je pense que c'est parce que r est un objet null.Parce que quand je ne
if (isRoot(findParent) || r==null){
System.out.println(r==null);
return null;}
r==null
évalue à true
.Comment arriver parce que j'ai inséré les nœuds comme
public static void main (String args[]){
BinaryTree t=new BinaryTree();
t.insert(5);
t.insert(t.root,4);
t.insert(t.root,6);
t.insert(t.root,60);
t.insert(t.root,25);
t.insert(t.root,10);
et la racine n'est pas null.
Peut quelqu'un s'il vous plaît signaler pourquoi cela se produit et si ce que je suis en train de faire afin de trouver le nœud parent est logiquement correct.
Comment appelez-vous les trouver parent mehtod? Quels arguments avez-vous?
findParent n'est pas une méthode.C'est un binaryNode qui stocke le nœud que nous avons besoin de trouver des parents de
Désolé, je voulais dire le parent(BinaryNode) méthode
Je veux trouver le parent du nœud situé à gauche de la racine, la méthode peut être appelée la " mère(de la racine.gauche)`
Avez-vous vérifié si isRoot(findParent) évalue à true?
findParent n'est pas une méthode.C'est un binaryNode qui stocke le nœud que nous avons besoin de trouver des parents de
Désolé, je voulais dire le parent(BinaryNode) méthode
Je veux trouver le parent du nœud situé à gauche de la racine, la méthode peut être appelée la " mère(de la racine.gauche)`
Avez-vous vérifié si isRoot(findParent) évalue à true?
OriginalL'auteur sam_rox | 2014-05-25
Vous devez vous connecter pour publier un commentaire.
Le problème est que vous DEVEZ garder une trace de votre nœud actuel, tout en gardant le nœud qui la parent, vous voulez trouver. Et comme je le comprends votre code, vous gardez la variable, mais jamais le changer
Je vous recommande d'utiliser une fonction d'assistance. Cela ressemblerait à quelque chose comme ça:
public BinaryNode r=root;
juste à l'extérieur de méthode parent ().Puis de vérifier, je n'aipublic BinaryNode parent(BinaryNode p){ System.out.println("r"+r.element);
où je reçois une exception de pointeur nullCela signifie que r est un objet null c'est pourquoi
if (isRoot(findParent) || r==null){
obtient évalué toujours et il il retourne false et le reste du code n'est même pas courir.**Pourquoi ne r devenir un objet null**.C'est mon binaryTree mise en œuvre.public class BinaryTree { private BinaryNode root; public BinaryTree(){ root= null;}BinaryTree(int nodeValue){ root=new BinaryNode(nodeValue);}
et je l'insertion d'éléments commet.insert(5); t.insert(t.root,4);
Votre code fonctionne, je pense que les lignes
return parent(currentRoot.right,p);
changementreturn parentHelper(currentRoot.right,p);
OriginalL'auteur wastl
J'ai comparé la valeur de la valeur parce que je n'ai pas de définir la façon de comparer les nœuds.
OriginalL'auteur Aerin
Utilisation de deux paramètres: l'Un pour le nœud en cours et une pour le nœud en cours de recherche.
Eh bien, le problème ressemble à un devoir à la maison, donc je n'ai pas envie de donner trop de conseils 😉
Puis poste comme un commentaire. Je pense que c'est trop court (à la fois longueur et de la matière-sage) pour une réponse.
la pensée de r agit comme une variable qui garde les soins de noeud courant
n'est pas un devoir à la maison.Je suis à l'apprentissage de structures de données et les sous que je suis en train de faire les arbres. J'ai juste essayé l'écriture d'une méthode pour trouver parent juste pour m'aider à apprendre
OriginalL'auteur peq
Voici le code pour trouver le nœud parent à l'aide d'une pile de Structures de Données.
OriginalL'auteur Puneeth Reddy V