Wieso funktioniert der Code nicht?
binärbaum:
wenn ich das in der main erstelle mit
Tree t1 = new Tree();
t1.add(9);
t1.add(1);
t1.add(23);
und dann t1.root ausprinte funktinoiert es, aber t1.root.left liefert null, also es gibt nen fehler, wieso aber?
hat es was damit zu tun " parent = new TNode(data);" ?ich übergeben den linken knoten der wurzel und das ist jetzt parent, und dann weise ich parent neu zu also ich weise den linken knoten der wurzel neu zu, wieso geht das aber nicht?
public class Tree {
TNode root;
Tree(){
this.root = null;
}
public void add(int data){
if(root == null){
root = new TNode(data);
}else{
if(data < this.root.data){
add(data, root.left);
System.out.println("miosty");
}else {
add(data, root.right);
}
}
}
public void add(int data, TNode parent){
if(parent == null){
System.out.println("Zu");
parent = new TNode(data);
}else{
if(data < parent.data){
add(data, parent.left);
} else {
add(data, parent.right);
}
}
}
}
wer schaut sich diese frage gerade an?
1 Antwort
parent = new TNode(data);
Mir wäre neu, das Java per Pass-By-Referenz macht. Was du hier machst ist, die lokale Variable "parent" auf einen Wert zu setzen, nicht aber das Original übergebene Objekt.
Dann übergib doch root und amch damit etwas. Oder verwende Rückgabewerte.
hmm das funzt auch nicht, das muss doch gehen
Klar, wenn man es richtug macht. Aber ich habe gerade nicht die Zeit dafür.
public void add(int data){
root = add(data, root , root);
/*
if(root == null){
root = new TNode(data);
}else{
if(data < this.root.data){
root.left = add(data, parent, root.left);
}else {
root.right = add(data, parent, root.right);
}
}
*/
}
public TNode add(int data, TNode parent, TNode child){
if(child == null){
return new TNode(data);
}else{
if(data < parent.data){
child.left = add(data, child, child.left);
} else {
child.right = add(data, child.right);
}
return child;
}
}
So sollte das funktionieren. Wenn nicht, dann mit dem auskommentiertem Part aber ohne den Funktionsaufruf.
wie mache ich das sonst, im video hat der typ das ähnlich gemacht, er hat aber root übergeben (hab screenshot hochgeladen)