EDIT: richtige Lösung:Einsetzen in einen Baum
void add(Student s)
{
if(root == null)
root = new TreeNode(s);
else
insert(root,s);
}
void insert(TreeNode tn, Student s)
{
if(tn.sVal.compareTo(s) > 0)
{
if(tn.left != null)
insert(tn.left, s);
else
{
tn.left = new TreeNode(s);
tn.left.parent = tn;
}
}
else if(tn.sVal.compareTo(s) < 0)
{
if(tn.right != null)
insert(tn.right, s);
else
{
tn.right = new TreeNode(s);
tn.right.parent = tn;
}
}
balance(tn);
}
Ich versuche, in einen binären Baum Einfügen der folgenden Verfahren:
void add(Student s)
{
insert(root,s);
}
private void insert(TreeNode t, Student s)
{
if(t == null)
t = new TreeNode(s);
else if(t.sVal.compareTo(s) > 0)
insert(t.right, s);
else if(t.sVal.compareTo(s) < 0)
insert(t.left,s);
}
jedoch der Baum bleibt leer, und ich kann nicht herausfinden, warum. Ich hasse es, so vage zu sein, aber ich kann keinen Fehler in der Logik finden. Was vermisse ich?
Was ist 'root' hier im Methodenaufruf' insert (root, s); '? – Lion
Alles, was Sie tun, ist einen neuen Baumknoten zu erstellen - Sie fügen ihn nie wirklich in den Baum ein. –
@DaveNewton - der neue Knoten, der t zugeordnet ist. Dieser Knoten sollte auf einen Knoten im Baum verweisen.Wenn der Baum beispielsweise leer ist, ist der Stamm null und root = t = neuer Knoten. Zumindest, dass die Logik, der ich folge. – MikeTheLiar