Я пишу программу, которая может манипулировать бинарным деревом поиска. Одним из необходимых методов является метод remove (). Я передаю 2 строковых аргумента в метод, и узел должен удалить, если 2 строковые переменные в узле (имя, фамилия) соответствуют соответствующим строковым аргументам.
Основной метод
Tree directory = new Tree();
InputData newPerson1 = new InputData("luca", "galati", "asdasda", "sadfasdf");
directory.insert(newPerson1);
InputData newPerson2 = new InputData("sdfasf", "blackman", "asdasda", "sadfasdf");
directory.insert(newPerson2);
InputData newPerson3 = new InputData("fsdgdfg", "kramer", "asdasda", "sadfasdf");
directory.insert(newPerson3);
InputData newPerson4 = new InputData("dsafgas", "wallace", "asdasda", "sadfasdf");
directory.insert(newPerson4);
InputData newPerson5 = new InputData("asdfasdfasdf", "dangelo", "asdasda", "sadfasdf");
directory.insert(newPerson5);
InputData newPerson6 = new InputData("sfasdasfas", "alla", "asdasda", "sadfasdf");
directory.insert(newPerson6);
InputData newPerson7 = new InputData("hfdhsds", "eeves", "asdasda", "sadfasdf");
directory.insert(newPerson7);
directory.remove("kodfjgasdfg", "blackman");
File output = new File ("output.txt");
output.delete();
directory.print();
метод remove ()
boolean remove (String firstName, String lastName)
{
Node focusNode = root;
Node parent = root;
boolean isItALeftChild = true;
while (!lastName.equals(focusNode.inputData.lastName) && !focusNode.inputData.firstName.equals(firstName))
{
parent = focusNode;
if (lastName.compareTo(focusNode.inputData.lastName) < 0)
{
isItALeftChild = true;
focusNode = focusNode.leftChild;
}
else if (lastName.compareTo(focusNode.inputData.lastName) > 0)
{
isItALeftChild = false;
focusNode = focusNode.rightChild;
}
else
{
if (firstName.compareTo(focusNode.inputData.firstName) < 0)
{
isItALeftChild = true;
focusNode = focusNode.leftChild;
}
else if (firstName.compareTo(focusNode.inputData.firstName) > 0)
{
isItALeftChild = false;
focusNode = focusNode.rightChild;
}
}
if (focusNode == null)
{
return false;
}
}
if (focusNode.leftChild == null && focusNode.rightChild == null)
{
if (focusNode == root)
{
root = null;
}
else if (isItALeftChild)
{
parent.leftChild = null;
}
else
{
parent.rightChild = null;
}
}
else if (focusNode.rightChild == null)
{
if (focusNode == root)
{
root = focusNode.leftChild;
}
else if (isItALeftChild)
{
parent.leftChild = focusNode.leftChild;
}
else
{
parent.rightChild = focusNode.leftChild;
}
}
else if (focusNode.leftChild == null)
{
if (focusNode == root)
{
root = focusNode.rightChild;
}
else if (isItALeftChild)
{
parent.leftChild = focusNode.rightChild;
}
else
{
parent.rightChild = focusNode.rightChild;
}
}
else if (focusNode.leftChild != null && focusNode.rightChild != null)
{
Node replacement = getReplacementNode(focusNode);
if (focusNode == root)
{
root = replacement;
}
else if (isItALeftChild)
{
parent.leftChild = replacement;
}
else
{
parent.rightChild = replacement;
}
replacement.leftChild = focusNode.leftChild;
}
return true;
}
getReplacementNode () метод
Node getReplacementNode(Node replacedNode)
{
Node replacementParent = null;
Node replacement = null;
Node focusNode = replacedNode.rightChild;
while (focusNode != null)
{
replacementParent = replacement;
replacement = focusNode;
focusNode = focusNode.leftChild;
}
if (replacement != replacedNode.rightChild)
{
replacementParent.leftChild = replacement.rightChild;
replacement.rightChild = replacedNode.rightChild;
}
return replacement;
}