class LinkedList {
static LNode head;
class LNode
{
int information;
LNode subsequent, prev;
LNode(int d)
{
information = d;
subsequent = prev = null;
}
}
class TNode
{
int information;
TNode left, proper;
TNode(int d)
{
information = d;
left = proper = null;
}
}
TNode sortedListToBST()
{
int n = countNodes(head);
return sortedListToBSTRecur(n);
}
TNode sortedListToBSTRecur(int n)
{
if (n <= 0)
return null;
TNode left = sortedListToBSTRecur(n / 2);
TNode root = new TNode(head.information);
root.left = left;
head = head.subsequent;
root.proper = sortedListToBSTRecur(n - n / 2 - 1);
return root;
}
int countNodes(LNode head)
{
int rely = 0;
LNode temp = head;
whereas (temp != null)
{
temp = temp.subsequent;
rely++;
}
return rely;
}
void push(int new_data)
{
LNode new_node = new LNode(new_data);
new_node.prev = null;
new_node.subsequent = head;
if (head != null)
head.prev = new_node;
head = new_node;
}
void printList(LNode node)
{
whereas (node != null)
{
System.out.print(node.information + " ");
node = node.subsequent;
}
}
void preOrder(TNode node)
{
if (node == null)
return;
System.out.print(node.information + " ");
preOrder(node.left);
preOrder(node.proper);
}
public static void important(String[] args) {
LinkedList llist = new LinkedList();
llist.push(7);
llist.push(6);
llist.push(5);
llist.push(4);
llist.push(3);
llist.push(2);
llist.push(1);
System.out.println("Given Linked Listing ");
llist.printList(head);
TNode root = llist.sortedListToBST();
System.out.println("");
System.out.println("Pre-Order Traversal of constructed BST ");
llist.preOrder(root);
}
}
