Ciao a tutti, sto svolgendo deli esercizi sugli alberi binari ma alcuni di questi non mi funzionano. Posto il codice:
Il metodo isComplete deve restituire true se l'albero e' completo, false altrimenti. Un albero e' completo se:codice:public class BinaryTree { protected class Node { Integer element; Node left; Node right; Node(int element) { this.element = element; left = right = null; } Node(int element, Node left, Node right) { this.element = element; this.left = left; this.right = right; } boolean isLeaf() { return left == null && right == null; } } protected Node root; public BinaryTree() { root = null; } public boolean isComplete() { return isComplete(root) > -2; } private int isComplete(Node node) { int hl; int hr; if(node == null) return -1; hl = isComplete(node.left); hr = isComplete(node.right); if(hl != hr) return -2; else return 1 + Math.max(hl, hr); } private class BoolNode { boolean fatto; Node nodo; BoolNode(boolean fatto, Node nodo) { this.fatto = fatto; this.nodo = nodo; } } public boolean removeSubtree(int x) { BoolNode ris = removeSubtree(root, x); root = ris.nodo; return ris.fatto; } private BoolNode removeSubtree(Node node, int x) { if(node == null) return new BoolNode(false, null); if(node.element == x) return new BoolNode(true, null); BoolNode result = removeSubtree(node.left, x); if(result.fatto) node.left = null; else { result = removeSubtree(node.right, x); node.right = null; } return new BoolNode(result.fatto, node); } }
- tutti i livelli sono saturi tranne eventualmente l'ultimo
- l'ultimo livello e' riempito da sinistra verso destra.
Questo metodo funziona ma penso mi manchi un caso da considerare, cioè quando i due sottoalberi sono entrambi non compelti. Come devo modificare il codice in quel caso?
Il metodo removeSubtree invece elimina il sottoalbero di radice x. Se x è presente più volte, elimina uno solo dei sottoalberi. Se l'eliminazione è andata a buon fine restituisce true, se invece l'elemento non è presente restituisce false.
Questo metodo non funziona perchè se gli inserisco un albero del tipo
![]()
e gli metto x = 8, mi restituisce![]()
L'errore è nelle due istruzioni sottolineate.. ma non so come modificarle..
Qualche aiuto?
Grazie

Rispondi quotando