
Originariamente inviata da
OmarCore93
Un esercizio:
Dato un albero binario in cui ogni nodo è bianco o nero (identificali come vuoi), un sottoalbero monocolore è un sottoalbero avente tutti i nodi dello stesso colore: scrivere un algoritmo che calcola la dimensione massima di un sottoalbero monocolore nell'albero, dove per dimensione si intende la quantità di nodi del sottoalbero.
Non so se sai cos'è la complessità computazionale, fatto sta che puoi farlo in tempo O(n), se non sai cos'è fallo pure senza tenere conto dell'efficienza.
ho scritto questa roba che almeno dovrebbe contare le occorrenze del colore (so che non è quello che chiede il problema posto
)
ho usato le implementazioni usate nel corso ma credo sia tutto comprensibile (BTPosition<E> è un nodo dell'albero che usa tipo generico E, Position è l'interfaccia implementata da BTPosition).
il problema qui è che num viene azzerato ad ogni ricorsione credo
quindi?
codice:
public int getMaxSubtree(E color, Position<E> c){
BTPosition<E> cc = checkPosition(c);
int num=0;
if(hasLeft(cc)) {
if(color==cc.element()) num+=getMaxSubtree(color, left(cc));
getMaxSubtree(color, left(cc));
}
if(hasRight(cc)){
if(color==cc.element()) num+=getMaxSubtree(color, left(cc));
getMaxSubtree(color, left(cc));
}
return num;
}