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;
_右。_左=_左;
}
}               
}
回流;
}

此操作需要更新某些元素的父元素,但在此代码中我看不到它。此外,为什么
删除
功能不是无效的。为什么它会返回一个值?我想这是当前的。