我有一个这样的树结构:
10
/ \
5 12
/ \ / \
3 7 11 18
大于右链接之前的元素的值,左链接较小的值。现在我想添加一个“删除”功能,但不知何故我做错了。例如,当我删除 5 时,它应该如下所示:
10
/ \
3 12
\ / \
7 11 18
已删除元素 (5) 中较小的链接元素 (3) 应与已删除元素所链接的元素链接。这是我的删除功能:
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
指向较大元素。如果您需要更多代码,请询问。