Exemple #1
0
        public void Remove(T value)
        {
            if (Head == null)
            {
                return;
            }
            Node <T> removalNode = Find(value);

            if (removalNode.ChildCount() == 0)
            {
                if (removalNode.IsRightChild() == Node <T> .ChildType.Right)
                {
                    removalNode.Parent.Right = null;
                    removalNode = null;
                }
                else if (removalNode.IsRightChild() == Node <T> .ChildType.Left)
                {
                    removalNode.Parent.Left = null;
                    removalNode             = null;
                }
                else
                {
                    removalNode = null;
                    return;
                }
                Count--;
                return;
            }
            else if (removalNode.ChildCount() == 1)
            {
                if (removalNode.IsRightChild() == Node <T> .ChildType.Right)
                {
                    removalNode.Child().Parent = removalNode.Parent;
                    removalNode.Parent.Right = removalNode.Child();
                }
                else if (removalNode.IsRightChild() == Node <T> .ChildType.Left)
                {
                    removalNode.Child().Parent = removalNode.Parent;
                    removalNode.Parent.Left = removalNode.Child();
                }
            }
            else if (removalNode.ChildCount() == 2)
            {
                Node <T> temp = removalNode.Left;
                temp = max(temp);
                T val = temp.Value;
                Remove(val);
                removalNode.Value = val;
            }
        }