public static int findMaxUniqueNodesInPath(TreeNode root){ //gate keep if(root == null) return 0; //create seen hashMap HashMap seenMap = new HashMap(); return findMaxUniqueUtil(root, seenMap); } public static int findMaxUniqueUtil(TreeNode root, HashMap seemMap){ if(root == null) return seemMap.size(); //store into hashMap if(seemMap.containsKey(root.val)) { int size = seemMap.size(); seemMap.clear(); return size; } // seemMap.put(root.val, seemMap.get(root.val)+1); else seemMap.put(root.val,1); int maxLength = Math.max(findMaxUniqueUtil(root.left, seemMap), findMaxUniqueUtil(root.right,seemMap)); // if(seemMap.containsKey(root.val)) // seemMap.put(root.val,seemMap.get(root.val) -1); // if(seemMap.get(root.val) == 0) { // seemMap.remove(root.val); // return maxLength; // } return maxLength; } public static void main(String[] args){ TreeNode root = new TreeNode(1); root.left = new TreeNode(2); root.right = new TreeNode(3); root.left.left = new TreeNode(3); root.left.left = new TreeNode(2); root.right.left = new TreeNode(3); root.right.right = new TreeNode(1); root.right.right.left = new TreeNode(5); root.right.right.right = new TreeNode(6); System.out.println(findMaxUniqueNodesInPath(root)); TreeNode root2 = new TreeNode(1); root2.left = new TreeNode(2); root2.left.left = new TreeNode(4); root2.left.right = new TreeNode(5); root2.right = new TreeNode(3); root2.right.left = new TreeNode(6); root2.right.right = new TreeNode(3); root2.right.left.right = new TreeNode(8); root2.right.right.right = new TreeNode(9); System.out.println(findMaxUniqueNodesInPath(root2)); TreeNode root3 = new TreeNode(1); root3.right = new TreeNode(2); root3.right.left = new TreeNode(1); root3.right.right = new TreeNode(1); root3.right.right.left = new TreeNode(4); System.out.println(findMaxUniqueNodesInPath(root3)); }