findMin eliminación perezosa árbol de búsqueda binaria

user11452926:

He encontrado este código para el método de eliminación findMIn perezoso de árbol binario de búsqueda. En primer lugar, es correcta este método? Si se trata de lata alguien me lo explique por favor.

private BinaryNode<AnyType> findMin( BinaryNode<AnyType> t )
{
if (t == null) return null;

BinaryNode<E> tmp= findMin(t.left); // get minimum from the left node

if (tmp != null) return tmp; // if mimimum is not null return minimmum

if (!t.deleted) return t; // if minimum is null in left node and t is not deleted
// return t then

return findMin(t.right); // if t is deleted and minimum of left node of t is null, then search in right side

}

He reescrito para incluir lo siguiente, pero no está funcionando.

 private BinaryNode<AnyType> findMin( BinaryNode<AnyType> t)

      {
      ArrayList<BinaryNode<AnyType>> trv = new ArrayList<BinaryNode<AnyType>>();

         return findMinVal(t, trv);
      }
private BinaryNode<AnyType> findMin( BinaryNode<AnyType> t, ArrayList<BinaryNode<AnyType>> trv )

     {
             if(t == null) {
                 return t;
             } else {
                 BinaryNode<AnyType> left= findMin(t.left);
                 if(!t.deleted) {
                     trv.add(t);
                 }
                 BinaryNode<AnyType> right= findMin(t.right);

                 return trv.get(0);
             }
Prerna Gupta:

Esto puede tirar java.lang.IndexOutOfBoundsException, si mientras se hace trv.get(0)ArrayList trvtamaño es 0.

Con el fin de evitar que se puede comprobar que si el tamaño de la trvno es 0, entonces puede volver primer elemento de esta lista nula en el interior o regrese findMinfunción

Aquí está el código de actualización:

private BinaryNode<AnyType> findMin( BinaryNode<AnyType> t, ArrayList<BinaryNode<AnyType>> trv )

     {
             if(t == null) {
                 return t;
             } else {
                 BinaryNode<AnyType> left= findMin(t.left);
                 if(!t.deleted) {
                     trv.add(t);
                 }
                 BinaryNode<AnyType> right= findMin(t.right);

                 return trv.size()==0 ? null :trv.get(0);
             }
     }

Como, una mejora en lugar de regresar BinaryNode<AnyType>a findMinla función que puede volver vacío desde todos modos el resultado se almacena en trvarrylist y en vez de comprobar cada vez que return trv.size()==0 ? null :trv.get(0);el interior de findMinla función (esto se comprueba por cada llamada recursiva), se puede comprobar sólo una vez en el interior función auxiliar.

Aquí se actualiza código optimizado:

  private BinaryNode<AnyType> findMin( BinaryNode<AnyType> t)

      {
      ArrayList<BinaryNode<AnyType>> trv = new ArrayList<BinaryNode<AnyType>>();

         findMinVal(t, trv);
         return trv.size()==0 ? null :trv.get(0);
      }

private BinaryNode<AnyType> findMin( BinaryNode<AnyType> t, ArrayList<BinaryNode<AnyType>> trv )

     {
             if(t!=null) {
                 findMin(t.left);
                 if(!t.deleted) {
                     trv.add(t);
                 }
                 findMin(t.right);
             }
}

En el código anterior orignal dos si hay condiciones:

if (tmp != null) return tmp;Esto se utiliza para imprimir el valor devuelto ya no estamos usando la clase ArrayList de estructura de datos en código orignal para almacenar el resultado tan pronto a medida que resultan de findMinllamada recursiva que no es nulo estamos volviendo él.

if (!t.deleted) return t;Esto se utiliza para la misma razón, ya que es utilizado por el código como if(!t.deleted) {trv.add(t)}por ejemplo estamos comprobando si volvió findMin (izquierda) nully si su nodo raíz no se elimina luego regresar ese nodo ya que los niños pequeños que este nodo raíz correctas y por lo tanto no hay necesidad para comprobar más.

Sin embargo, no hay uso de if (tmp != null) return tmp;puesto de todos modos cada vez que se vaya a if (!t.deleted) return t;y desde allí como resultado bien puede ser devuelto. Por lo que este first ifpuede ser eliminado.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=283510&siteId=1
Recomendado
Clasificación