Help me in solving TAG problem

My issue

I spent 6 days of my life tring to understand why this particular code I wrote is only partially correct! Is there anyone who can help me solve this? I give up on identifying what corner case my code is failing to catch.

Please mail to javavenk@gmail.com, I will call/contact you on phone or whatsapp to listen to whatever suggestion/advice you could give.

My code

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;

class Codechef {

public static void main(String[] args) throws Throwable {
	BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
	int T = Integer.valueOf(br.readLine()), t = 0;
	String nextLine[];

	Integer N, s, d, w, mw, h;
	Map<Integer, Integer> edges, weights;
	Set<Integer> leaves, midPoints;

	for (t = 0; t < T; t++) {
		nextLine = br.readLine().split("\\s+");
		N = Integer.valueOf(nextLine[0]);

		leaves = new HashSet<>();
		edges = new HashMap<>();
		for (int i = 0; i < N-1; i++) {
			nextLine = br.readLine().split("\\s+");
			s = Integer.valueOf(nextLine[0]);
			d = Integer.valueOf(nextLine[1]);
			leaves.add(d);
			if (leaves.contains(s)) {
				leaves.remove(s);
			}
			edges.put(d, s);
		}

		weights = new HashMap<>();
		midPoints = new HashSet<>();
		for (Integer l : leaves) {
			d = edges.get(l);
			s=l;
			h=1;
			while (d != null) {
				weights.put(d, weights.getOrDefault(d, 0) + 1);
				d = edges.get(d);
				
				if(h%2==0) {
					s = edges.get(s);
				}
				h++;
			}
			midPoints.add(s);
			midPoints.remove(l);
		}
		
		mw = 0;
		for (Integer m : midPoints) {
			w = weights.get(m);
			if (w > mw) {
				mw = w;
			}
		}

		System.out.println(mw);
	}

}

}
Problem Link: Chef and Tag Practice Coding Problem - CodeChef