Dis(n1, n2) = Dis(root, n1) + Dis(root, n2) - 2* Dis(root, lca)
public static void main(String[] args) { // TODO Auto-generated method stub onsite2 onsite2=new onsite2(); TreeNode root = new TreeNode(5); root.left = new TreeNode(10); root.right = new TreeNode(15); root.left.left = new TreeNode(20); root.left.right = new TreeNode(25); root.right.left = new TreeNode(30); root.right.right = new TreeNode(35); root.left.right.right = new TreeNode(45); System.out.println("Distance between 45 and 20 is : " + onsite2.findDistance(root,15,45)); } public int findDistance(TreeNode root, int n1, int n2) { int x = Pathlength(root, n1) - 1; int y = Pathlength(root, n2) - 1; int lcaData = lowestCommonAncestor(root, n1, n2).val; int lcaDistance = Pathlength(root, lcaData) - 1; return (x + y) - 2 * lcaDistance; } public int Pathlength(TreeNode root, int n1) { if (root != null) { int x = 0; if ((root.val == n1) || (x = Pathlength(root.left, n1)) > 0 || (x = Pathlength(root.right, n1)) > 0) { // System.out.println(root.data); return x + 1; } return 0; } return 0; } public TreeNode lowestCommonAncestor(TreeNode root, int p, int q) { if (root==null ||root.val==p|| root.val==q) { return root; } TreeNode left= lowestCommonAncestor(root.left, p, q); TreeNode right=lowestCommonAncestor(root.right, p, q); if (left!=null && right!=null) { return root; } return left!=null?left:right; }