using
System;
using
System.Collections.Generic;
public
class
DeleteLastNode {
public
class
Node {
public
Node left, right;
public
int
data;
public
Node(
int
data)
{
this
.data = data;
}
}
public
void
inorder(Node root)
{
if
(root ==
null
)
return
;
inorder(root.left);
Console.Write(root.data +
" "
);
inorder(root.right);
}
public
static
Node lastLevelLevelOrder;
public
static
Node parentOfLastNode;
public
void
deleteLastNode(Node root)
{
if
(root ==
null
)
return
;
Queue<Node> queue =
new
Queue<Node>();
queue.Enqueue(root);
while
(queue.Count!=0) {
Node temp = queue.Dequeue();
if
(temp.left !=
null
) {
queue.Enqueue(temp.left);
if
(temp.left.left ==
null
&& temp.left.right ==
null
) {
lastLevelLevelOrder = temp.left;
parentOfLastNode = temp;
}
}
if
(temp.right !=
null
) {
queue.Enqueue(temp.right);
if
(temp.right.left ==
null
&& temp.right.right ==
null
) {
lastLevelLevelOrder = temp.right;
parentOfLastNode = temp;
}
}
}
if
(lastLevelLevelOrder !=
null
&& parentOfLastNode !=
null
) {
if
(parentOfLastNode.right !=
null
)
parentOfLastNode.right =
null
;
else
parentOfLastNode.left =
null
;
}
else
Console.WriteLine(
"Empty Tree"
);
}
public
static
void
Main(String[] args)
{
Node root =
new
Node(6);
root.left =
new
Node(5);
root.right =
new
Node(4);
root.left.left =
new
Node(1);
root.left.right =
new
Node(2);
root.right.right =
new
Node(5);
DeleteLastNode deleteLastNode
=
new
DeleteLastNode();
Console.WriteLine(
"Inorder traversal "
+
"before deletion of "
+
"last node : "
);
deleteLastNode.inorder(root);
deleteLastNode.deleteLastNode(root);
Console.WriteLine(
"\nInorder traversal "
+
"after deletion "
+
"of last node : "
);
deleteLastNode.inorder(root);
}
}