Я делаю BST (двоичное дерево поиска). Мне нужна помощь в методе удаления, кажется, что когда я устанавливаю этот узел на нуль, он появляется, когда я показываю его с помощью моих методов отображения (предзаказ, порядок, порядок).Почему мой узел все еще появляется, когда я устанавливаю его на нуль?
Вот мой узел связанного списка класс
public class Node<T>
{
public int value;
public Node leftValue;
public Node rightValue;
public Node(int _value)
{
value=_value;
}
}
Вот мой метод удаления в моем классе BST
public void findDelete(Node root, int value)
{
if (root== null)
{
System.out.println(" Not founded ");
}
else if (value < root.value)
{
findDelete(root.leftValue,value);
}
else if (value > root.value)
{
findDelete(root.rightValue,value);
}
else if (value == root.value)
{
//// checks if have children
if (root.leftValue==null&&root.rightValue==null)
{
root = null;
}
//// one
else if (root.leftValue==null)
{
root.value=root.rightValue.value;
}
else if (root.rightValue==null)
{
root.value=root.leftValue.value;
}
//// two
else if (root.leftValue!=null && root.rightValue!=null)
{
root.value=findMin(root.rightValue);
findDelete(root.rightValue,value);
}
}
else
{
System.out.println(" Not founded ");
}
}
Моих Удалять методы также пытается справиться с назначением нового преемника, если узел имеет ребенок (листья). Могу ли я также получить некоторую обратную связь, если я буду делать это правильно? Он пытается обрабатывать 3 случая. Случай 1 без детей, случай 2 1 ребенок, случай 3 2 ребенка.
Я думаю, вероятно, это строка в моем методе удаления, которая удаляет ее, установив ее в null, если она не имеет детей.
if (root.leftValue==null&&root.rightValue==null)
{
root = null;
}
Она устанавливает его в нуль, но root.value все еще имеет значение INT, что делает его еще там, когда я показываю его с моим методом отображения. По крайней мере, это то, что я считаю проблемой. Мне нужна помощь и отзывы!
один из моего метода отображения
public void printPre(Node root)
{
if (root==null)
{
return;
}
System.out.print(root.value + ", ");
printPre(root.leftValue);
printPre(root.rightValue);
}
Спасибо за помощь!
Знаете ли вы разницу между объектами и ссылками, а также между объектами и переменными? – immibis
Думаю, что да, но если вы не возражаете прояснить, было бы полезно – Dragael
Знаете ли вы разницу между переменной 'root' и объектом, на который она ссылается? – immibis