EDIT: правильное решение:Вставка в дерево
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);
}
Я пытаюсь вставить в бинарное дерево, используя следующее:
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);
}
Однако, дерево остается пусто, и я не могу понять, почему. Я ненавижу быть настолько расплывчатым, но я не могу найти ошибку в логике. Что мне не хватает?
Что такое 'root' здесь в методе call' insert (root, s); '? – Lion
Все, что вы делаете, это создать новый узел дерева - вы никогда не вставляете его в дерево. –
@DaveNewton - новый узел, назначенный t, который должен быть ссылкой на узел в дереве.Например, если дерево пуст, корень равен нулю, а root = t = новый узел. По крайней мере, та логика, за которой я следую. – MikeTheLiar