Ciao a tutti, sto svolgendo deli esercizi sugli alberi binari ma alcuni di questi non mi funzionano. Posto il codice:

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);	
	}
}
Il metodo isComplete deve restituire true se l'albero e' completo, false altrimenti. Un albero e' completo se:
- 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