C# 从树数据结构中删除元素
我有一个这样的树结构:C# 从树数据结构中删除元素,c#,data-structures,tree,C#,Data Structures,Tree,我有一个这样的树结构: 10 / \ 5 12 / \ / \ 3 7 11 18 10 / \ 3 12 \ / \ 7 11 18 大于之前元素的值将链接到右侧,较小的值将链接到左侧。 现在我想添加一个“Remove”函数,但不知怎么的,我没有把它做好。 例如,当我删除5时,它应该如下所示: 10 / \ 5 12 / \ / \ 3 7 11 18 10
10
/ \
5 12
/ \ / \
3 7 11 18
10
/ \
3 12
\ / \
7 11 18
大于之前元素的值将链接到右侧,较小的值将链接到左侧。
现在我想添加一个“Remove”函数,但不知怎么的,我没有把它做好。
例如,当我删除5时,它应该如下所示:
10
/ \
5 12
/ \ / \
3 7 11 18
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;
}
公共远程通信根元素;
公共无效删除(int值)
{
if(RootElement==null)
{
抛出新异常(“不能删除任何内容!”);
}
if(RootElement.\u left==null&&RootElement.\u right==null)
{
RootElement=null;
返回;
}
RootElement=RootElement.RemoveElement(值,RootElement);
}
公共远程通讯删除(int值,远程通讯当前)
{
如果(值!=\u值)
{
如果(值<_值)
{
_左。移除元素(值,当前);
}
如果(值>\u值)
{
_右。移除元素(值,当前);
}
}
如果(值==\u值)
{
如果(_值<当前值)
{
如果(_left==null&&u right==null)
{
}
其他的
{
当前。_left=_left;
_左。_右=_右;
}
}
如果(_值>当前值)
{
如果(_left==null&&u right==null)
{
}
其他的
{
当前。_right=_right;
_右。_左=_左;
}
}
}
电流=这个;
回流;
}
\u left
是指向较小元素的指针,\u 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;
}
公共远程通信删除元素(int值,远程通信当前)
{
如果(值!=\u值)
{
如果(值<_值)
{
电流=这个;
_左。移除元素(值,当前);
}
如果(值>\u值)
{
电流=这个;
_右。移除元素(值,当前);
}
}
如果(值==\u值)
{
如果(_值<当前值)
{
如果(_left==null&&u right==null)
{
当前值。_left=null;
}
其他的
{
当前。_left=_left;
_左。_右=_右;
}
}
如果(_值>当前值)
{
如果(_left==null&&u right==null)
{
当前。_right=null;
}
其他的
{
当前。_right=_right;
_右。_左=_左;
}
}
}
回流;
}
此操作需要更新某些元素的父元素,但在此代码中我看不到它。此外,为什么删除
功能不是无效的。为什么它会返回一个值?我想这是当前的。