簡體   English   中英

從樹數據結構中刪除元素

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM