public TreeAVL() { Root = null; }
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); }