Estou implementando uma arvore binaria, mas estou errando.
Em c, é tranferido um ponteiro. Mas no java não trabalhamos com ponteiros e não consigo tornar um no nulo.
marquei o erro :
/**
*
* @author Luiz Augusto Prado
*/
public class No
{
Integer Value;
No noMin;
No noMax;
}
/**
*
* @author Luiz Augusto Prado
*/
public class Action
{
public String Insert(int Value, No no)
{
if (no.Value == null)
{
no.Value = Value;
return "Inserido com sucesso";
}
else if (no.Value == Value)
{
return "Já existe";
}
else if (Value > no.Value)
{
if (no.noMax == null)
{
no.noMax = new No();
}
return Insert(Value, no.noMax);
}
else
{
if (no.noMin == null)
{
no.noMin = new No();
}
return Insert(Value, no.noMin);
}
}
public String Find(int Value, No no)
{
if (no == null || no.Value == null)
{
return "nao achou";
}
else if (no.Value == Value)
{
return "achou";
}
else if (Value > no.Value)
{
return Find(Value, no.noMax);
}
else
{
return Find(Value, no.noMin);
}
}
public String Delete(int Value, No no)
{
if (Value > no.Value)
{
return Delete(Value, no.noMax);
}
else if (Value < no.Value)
{
return Delete(Value, no.noMin);
}
else
{
if (no.noMax != null && no.noMin != null)
{
No aux = FindMin(no.noMax);
no.Value = aux.Value;
Delete(aux.Value, no.noMax);
}
else if (no.noMax == null && no.noMin == null)
{
no.Value = null; // <----------------------------Erro? Sou obrigado a fazer essa gambiarra para funcionar.
no = null; // <----------------------------não funciona! Estou sem idéia.
}
else if (no.noMax == null)
{
no = no.noMin;
}
else
{
no = no.noMax;
}
}
return "Deletado";
}
public String ler(No no)
{
String resp = "";
if (no.noMin != null)
{
resp += ler(no.noMin);
}
if (no.Value != null)
{
resp += " " + no.Value + " ";
}
if (no.noMax != null)
{
resp += "" + ler(no.noMax) + "";
}
return resp;
}
public No FindMin(No no)
{
if (no.noMin == null )
{
return no;
}
else
{
return FindMin(no.noMin);
}
}
public No FindMax(No no)
{
if (no.noMax == null)
{
return no;
}
else
{
return FindMax(no.noMax);
}
}
public static void main(String[] args)
{
Action Ac = new Action();
No no = new No();
Ac.Insert(4, no);
Ac.Insert(1, no);
Ac.Insert(2, no);
Ac.Insert(8, no);
Ac.Insert(0, no);
Ac.Delete(1, no);
System.out.println(Ac.ler(no));
}
}