using
System;
public
class
Node
{
public
int
data;
public
Node left, right;
public
Node(
int
data)
{
this
.data = data;
left = right =
null
;
}
}
public
class
Level
{
public
int
maxlevel = 0;
}
public
class
BinaryTree
{
public
Node root;
public
Node result;
public
virtual
void
deepestLeftLeafUtil(Node node,
int
lvl,
Level level,
bool
isLeft)
{
if
(node ==
null
)
{
return
;
}
if
(isLeft !=
false
&& node.left ==
null
&& node.right ==
null
&& lvl > level.maxlevel)
{
result = node;
level.maxlevel = lvl;
}
deepestLeftLeafUtil(node.left, lvl + 1, level,
true
);
deepestLeftLeafUtil(node.right, lvl + 1, level,
false
);
}
public
virtual
void
deepestLeftLeaf(Node node)
{
Level level =
new
Level();
deepestLeftLeafUtil(node, 0, level,
false
);
}
public
static
void
Main(
string
[] args)
{
BinaryTree tree =
new
BinaryTree();
tree.root =
new
Node(1);
tree.root.left =
new
Node(2);
tree.root.right =
new
Node(3);
tree.root.left.left =
new
Node(4);
tree.root.right.left =
new
Node(5);
tree.root.right.right =
new
Node(6);
tree.root.right.left.right =
new
Node(7);
tree.root.right.right.right =
new
Node(8);
tree.root.right.left.right.left =
new
Node(9);
tree.root.right.right.right.right =
new
Node(10);
tree.deepestLeftLeaf(tree.root);
if
(tree.result !=
null
)
{
Console.WriteLine(
"The deepest left child is "
+ tree.result.data);
}
else
{
Console.WriteLine(
"There is no left leaf in the given tree"
);
}
}
}