package jcf_map.exercise;

import java.util.HashMap;
import java.util.Map;
import java.util.TreeMap;

import binary_tree.BinaryNode;

public class BinaryTreeMap {
	/*
	 * Esercizio 1 - Esame del secondo parziale 8/1/2019
	 * Scrivere un metodo generico statico ContaDuplicati che conta il numero 
	 * di oggetti duplicati (non univoci) contenuti in un albero binario.
	 * Il risultato è il conteggio totale degli elementi che risultano duplicati 
	 * (non il numero totale di occorrenze, ma il numero di oggetti distinti che 
	 * hanno almeno un duplicato)
	 */
	public static <T> Map<T, Integer> ContaDuplicati(BinaryNode<T> node) {
		TreeMap<T, Integer> mappa = new TreeMap<T, Integer>();
		
	}
	
	protected static <T> Map<T, Integer> ContaDuplicati(BinaryNode<T> node, TreeMap<T, Integer> mappa) {
		if (node == null) return mappa;
		
		if (node.getLeft() != null) ContaDuplicati(node.getLeft(), mappa);
		if (node.getRight() != null) ContaDuplicati(node.getRight(), mappa);
		
		if (node.getData() == null) return mappa;
		
		T data = node.getData();
		if (mappa.get(data) == null) mappa.put(data, 1);
		else mappa.put(data, mappa.get(data) + 1);
		
		return mappa;
	}
	
}
