[英]Remove element from Tree Data Structure
我有一個像這樣的樹結構:
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
指向較大元素。 如果您需要更多代碼,只需詢問。
我的解決方案:
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;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.