int findClosestUtil(node *root, node **ance, int k, int level){
	if(root == NULL)
		return INT_MAX;
	int res = INT_MAX;
	if(root->data == k){
		int a = findClosestDown(root);
		for(int i=level-1; i>=0; i--){
			res = min(res, level - i + findClosestDown(ance[i]));
		}
		return min(res, a);
	}
	ance[level] = root;
	level++;
	return min(findClosestUtil(root->left, ance, k, level), findClosestUtil(root->right, ance, k, level));
}
int get_closest_leaf_distance(struct node *root, struct node *temp)
{
	if (root==NULL||temp==NULL)
  return -1;
  struct node *ancestors[100];

  return findClosestUtil(root, temp, ancestors, 0);
}
int findClosestUtil(struct node *root,struct node *temp, struct node *ancestors[],int index)
{
	
	if (root == NULL)
		return INT_MAX;

	
	if (root->data == temp->data )
	{
		
		int res = closestDown(root);

		
		for (int i = index - 1; i >= 0; i--)
			res = getmin(res, index - i + closestDown(ancestors[i]));
		return res;
	}

	ancestors[index] = root;
	int close_left = findClosestUtil(root->left, temp, ancestors, index + 1);
	int close_right = findClosestUtil(root->right, temp, ancestors, index + 1);
	return getmin(close_left,close_right);

}
int findClosest(node *root, int k){
	node *ance[100];
	return findClosestUtil(root, ance, k, 0);
}