У меня есть такая древовидная структура:
10
/ \
5 12
/ \ / \
3 7 11 18
Значения больше, чем элемент перед связыванием справа, меньшие - слева. Теперь я хочу добавить функцию «Удалить», но как-то не понимаю. Например, когда я удаляю 5, это должно выглядеть так:
10
/ \
3 12
\ / \
7 11 18
Меньший связанный элемент (3) из удаленного элемента (5) должен быть связан с элементом, с которым был связан удаленный элемент. Вот моя функция удаления:
public TElement RootElement;
public void Remove(int value)
{
if (RootElement == null)
{
throw new Exception("Can't delete nothing!");
}
if (RootElement._left == null && RootElement._right == null)
{
RootElement = null;
return;
}
RootElement = RootElement.RemoveElement(value, RootElement);
}
public TElement RemoveElement(int value, TElement current)
{
if (value != _value)
{
if (value < _value)
{
_left.RemoveElement(value, current);
}
if (value > _value)
{
_right.RemoveElement(value, current);
}
}
if (value == _value)
{
if (_value < current._value)
{
if (_left == null && _right == null)
{
}
else
{
current._left = _left;
_left._right = _right;
}
}
if (_value > current._value)
{
if (_left == null && _right == null)
{
}
else
{
current._right = _right;
_right._left = _left;
}
}
}
current = this;
return current;
}
_left
указывает на меньший элемент, а _right
указывает на больший элемент. Если вам нужно больше кода, просто спросите.
1 ответ
Мое решение:
public TElement RemoveElement(int value, TElement current)
{
if (value != _value)
{
if (value < _value)
{
current = this;
_left.RemoveElement(value, current);
}
if (value > _value)
{
current = this;
_right.RemoveElement(value, current);
}
}
if (value == _value)
{
if (_value < current._value)
{
if (_left == null && _right == null)
{
current._left = null;
}
else
{
current._left = _left;
_left._right = _right;
}
}
if (_value > current._value)
{
if (_left == null && _right == null)
{
current._right = null;
}
else
{
current._right = _right;
_right._left = _left;
}
}
}
return current;
}
Похожие вопросы
Новые вопросы
c#
C # (произносится как «резкий») - это высокоуровневый, статически типизированный язык программирования с несколькими парадигмами, разработанный Microsoft. Код C # обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, включая, среди прочего, .NET Framework, .NET Core и Xamarin. Используйте этот тег для вопросов о коде, написанном на C # или в формальной спецификации C #.
Remove
не недействительна. почему он возвращает значение?current
.