using
System;
public
class
TreeNode {
public
int
val;
public
TreeNode left;
public
TreeNode right;
public
TreeNode(
int
data)
{
val = data;
left =
null
;
right =
null
;
}
}
public
class
Program {
public
static
TreeNode Search(TreeNode root,
int
x)
{
if
(root ==
null
)
return
null
;
if
(root.val == x)
return
root;
TreeNode leftsubtree = Search(root.left, x);
if
(leftsubtree !=
null
)
return
leftsubtree;
TreeNode rightsubtree = Search(root.right, x);
return
rightsubtree;
}
public
static
int
Distance(TreeNode root)
{
if
(root ==
null
)
return
int
.MinValue + 1;
if
(root.left ==
null
&& root.right ==
null
)
return
0;
int
leftAns = Distance(root.left);
int
rightAns = Distance(root.right);
return
Math.Max(leftAns, rightAns) + 1;
}
public
static
int
DistanceTillLL(TreeNode root,
int
x)
{
TreeNode node = Search(root, x);
if
(node ==
null
)
return
-1;
root = node;
return
Distance(root);
}
public
static
void
Main()
{
int
x = 3;
TreeNode root =
new
TreeNode(1);
root.left =
new
TreeNode(2);
root.right =
new
TreeNode(3);
root.left.left =
new
TreeNode(4);
root.left.right =
new
TreeNode(5);
root.right.right =
new
TreeNode(7);
root.right.left =
new
TreeNode(6);
root.right.left.left =
new
TreeNode(8);
root.right.left.right =
new
TreeNode(9);
root.right.left.right.left =
new
TreeNode(10);
root.right.left.right.right =
new
TreeNode(11);
Console.WriteLine(DistanceTillLL(root, x));
}
}