# Find Distance in a Binary Tree

``````/**
* Definition for a binary tree node.
* public class TreeNode {
*     int val;
*     TreeNode left;
*     TreeNode right;
*     TreeNode() {}
*     TreeNode(int val) { this.val = val; }
*     TreeNode(int val, TreeNode left, TreeNode right) {
*         this.val = val;
*         this.left = left;
*         this.right = right;
*     }
* }
*/
class Solution {
public int findDistance(TreeNode root, int p, int q) {
TreeNode lca = lca(root, p, q);
return distance(lca, p, 0) + distance(lca, q, 0);
}
public int distance(TreeNode root, int p, int depth) {
if(root == null)
return Integer.MAX_VALUE; // unreachable
if(root.val == p)
return depth;
return Math.min(distance(root.left, p, depth + 1), distance(root.right, p, depth + 1));
}
public TreeNode lca(TreeNode root, int p, int q) {
if(root == null)
return root;
if(root.val == p)
return root;
if(root.val == q)
return root;
TreeNode l = lca(root.left, p, q);
TreeNode r = lca(root.right, p, q);
if(l == null)
return r;
if(r == null)
return l;
return root;
}
}``````