Пример #1
0
 public TreeAVL()
 {
     Root = null;
 }
Пример #2
0
        public AVLTreeNode <T> Eliminar(T valor)
        {
            AVLTreeNode <T> nAux       = Root;
            AVLTreeNode <T> nPadre     = Root;
            bool            isLeftLeaf = true;

            while (nAux.Value.CompareTo(valor) != 0)
            {
                nPadre = nAux;
                if (valor.CompareTo(nAux.Value) <= 0)
                {
                    isLeftLeaf = true;
                    nAux       = nAux.Left;
                }
                else
                {
                    isLeftLeaf = false;
                    nAux       = nAux.Left;
                }

                if (nAux == null)
                {
                    return(null);
                }
            }

            if (nAux.Left == null && nAux.Right == null)
            {
                if (nAux == Root)
                {
                    Root = null;
                }
                else if (isLeftLeaf)
                {
                    nPadre.Left = null;
                }
                else
                {
                    nPadre.Right = null;
                }
            }
            else if (nAux.Right == null)
            {
                if (nAux == Root)
                {
                    Root = nAux.Left;
                }
                else if (isLeftLeaf)
                {
                    nPadre.Left = nAux.Left;
                }
                else
                {
                    nPadre.Right = nAux.Left;
                }
            }
            else if (nAux.Left == null)
            {
                if (nAux == Root)
                {
                    Root = nAux.Right;
                }
                else if (isLeftLeaf)
                {
                    nPadre.Left = nAux.Right;
                }
                else
                {
                    nPadre.Right = nAux.Right;
                }
            }
            else
            {
                AVLTreeNode <T> nReplace = Replace(nAux);
                if (nAux == Root)
                {
                    Root = nReplace;
                }
                else if (isLeftLeaf)
                {
                    nPadre.Left = nReplace;
                }
                else
                {
                    nPadre.Right = nReplace;
                }
                nReplace.Left = nAux.Left;
            }

            return(nAux);
        }