Arbol binario

Iniciado por pabelsbf, 13 Diciembre 2016, 21:58 PM

0 Miembros y 1 Visitante están viendo este tema.

pabelsbf

Buenas a todos, tengo que hacer un método, que dándole un árbol binario con elementos enteros dentro de los nodos, me devuelva true, si para cada nodo, sus dos hijos (el de la izquierda y la derecha) son mayores o iguales que el nodo, y false en caso contrario.

Ejemplo: nodo= 7 Hijoderecho=7, Hijo izquierdo=8 (devuelve true)
             nodo =7 Hijoderecho=8, Hijo izquierdo=5 (devuelve false)

el código que tengo es este, pero no me llega a funcionar bien, creo que no me recorre el árbol entero, porque me devuelve true en casos que debería dar false.

public class HeapOrderChecker {

public static <E extends Comparable<E>> boolean satisfiesHeapOrderProperty (BinaryTree<E> tree) {

      boolean res=true;

      for(Position<E> w: tree.children(tree.root())){

         if(tree.hasLeft(w) && w.element().compareTo(tree.left(w).element())>0){
               return false;
            }
         

         if(tree.hasRight(w)&& w.element().compareTo(tree.left(w).element())>0){
            
               return false;
            }
      }
      return res;
   }
}

kingcreek

Comparas ambos con el de la izquierda

Código (java) [Seleccionar]

if(tree.hasLeft(w) && w.element().compareTo(tree.left(w).element())>0)

// compareTo(tree.left(w)

pabelsbf

Cita de: kingcreek en 13 Diciembre 2016, 23:40 PM
Comparas ambos con el de la izquierda

Código (java) [Seleccionar]

if(tree.hasLeft(w) && w.element().compareTo(tree.left(w).element())>0)

// compareTo(tree.left(w)


Muchas gracias, justo era eso me di cuenta y ya me daba todo bien 👍