Ich habe Probleme mit dem folgenden Code zu verstehen. Es ist eine Struktur Baumstruktur und ich verstehe nicht, warum brauchen wir zwei Knoten (Eltern und focusnode
) in der addnode()
Methode. Ich habe versucht, es mit nur focusnode
zu tun, aber es funktioniert nicht. Meine Idee ist zu root, und halten Sie es in Schleife, bis ist gleich null
, und setzen Sie focusnode
auf newnode
.Baum Datenstruktur Addnode
public class tree {
node root;
public class node{
private int key;
private node left;
private node right;
node(int key){
this.key = key;
}
public int getkey(){
return key;
}
public node getleft(){
return left;
}
public node getright(){
return right;
}
}
public void addnode(int key){
node newnode = new node(key);
if(root == null){
root = newnode;
}else{
node focusnode = root;
node parent;
while(true){
parent = focusnode;
if(key < focusnode.key){
focusnode = focusnode.left;
if(focusnode == null){
parent.left = newnode;
return;
}
}else{
focusnode = focusnode.right;
if(focusnode == null){
parent.right = newnode;
return;
}
}
}
}
}
public void runnode(node focusnode){
if(focusnode != null){
runnode(focusnode.left);
runnode(focusnode.right);
System.out.println(focusnode.key);
}
}`
Können wir Eltern nicht einfach loswerden und focusnode als Referenz verwenden? – user3725988
'focusnode' zeigt auf den' .left'/'.right' Knoten. Wenn Sie Ihren 'newnode' dem' focusnode' zuweisen, referenziert 'focusnode' nicht mehr' .left'/'.right' (was momentan' null' ist), sondern referenzieren Sie stattdessen Ihren 'newnode'. Aber wenn wir uns an den "Elternteil" erinnern, können wir "Elternteil.links" sagen und den Bezug des Elternteils '.left' /' .right' ändern, wovon die Baumstruktur abhängt. Die Zuweisung zu 'focusnode' ändert nicht, worauf 'parent.left' referenziert. –