package com.interview.linklist;
/**
* http://www.geeksforgeeks.org/sorted-linked-list-to-balanced-bst/
* Test cases
* empty list
* 0 1 or more node lists
*/
public class SortedLLToBalancedBST {
public Node toBalancedBST(Node head){
LinkList ll = new LinkList();
int size = ll.size(head);
NodeRef headRef = new NodeRef();
headRef.node = head;
return toBalancedBST(headRef, size);
}
private Node toBalancedBST(NodeRef headRef, int size){
if(size <= 0){
return null;
}
Node left = toBalancedBST(headRef,size/2);
Node head = headRef.node;
headRef.next();
Node right = toBalancedBST(headRef,size - size/2 -1);
head.before = left;
head.next = right;
return head;
}
public void printTreeInOrder(Node head){
if(head == null){
return;
}
printTreeInOrder(head.before);
System.out.println(head.data);
printTreeInOrder(head.next);
}
public void printTreePreOrder(Node head){
if(head == null){
return;
}
System.out.println(head.data);
printTreePreOrder(head.before);
printTreePreOrder(head.next);
}
public static void main(String args[]){
LinkList ll = new LinkList();
Node head = null;
head = ll.addNode(1, head);
head = ll.addNode(2, head);
head = ll.addNode(3, head);
head = ll.addNode(4, head);
head = ll.addNode(5, head);
head = ll.addNode(6, head);
head = ll.addNode(7, head);
SortedLLToBalancedBST sll = new SortedLLToBalancedBST();
head = sll.toBalancedBST(head);
sll.printTreeInOrder(head);
sll.printTreePreOrder(head);
}
}