Estoy tratando de encontrar el auto con el mayor número de premios. Visito cada nodo del árbol y obtengo el tamaño de la matriz y lo comparo con cada nodo. Sin embargo, parece que no puedo devolver el nodo con el valor más alto. ¿Alguien podría mirar mi código y señalar qué tiene de malo? Además, no estoy seguro de si lo estoy devolviendo correctamente desde el método recursivo mostPrizes
.
public class Car{ private String name; private double key; private ArrayList<Prize> Prizes; public Car left; public Car right; public Car(String name) { this.name = name; } public double getKey() { return key; } public void setKey(double key) { this.key = key; } public ArrayList<Prize> getPrizes() { return Prizes; } public void setPrizes(ArrayList<Prize> Prizes) { this.Prizes = Prizes; }} public class main{ public Car root; public void findWiner() { Car winner; Car a = root; Car b = root; winner = mostPrizes(a,b) public Car mostPrizes (Car car, Car best) { Car temp = best; //visit left node if (car.left != null){ mostPrizes(car.left,best); } //check how many prizes if(car.getPrizes().size() < best.getPrizes().size()){ best = car; } //visit right nodes if (car.right != null ){ mostPrizes(car.right,best); } return best; }}
El método mostPrzes
suyo no es correcto, porque no está asignando lo best
de los subárboles izquierdo y derecho al best
actual, cámbielo al código a continuación
public Car mostPrizes (Car car) { if(car== null){ return null; } Car leftMax= mostPrizes(car.left); Car rightMax= mostPrizes(car.right); if(leftMax!=null){ if(car.getPrizes().size()>leftMax.getPrizes().size()){ return node; } else{ return leftMax; } } if(rightMax!=null){ if(car.getPrizes().size()>rightMax.getPrizes().size()){ return node; } else{ return rightMax; } } return car; }