package com.interview.tree; /** * http://www.careercup.com/question?id=6241652616200192 * Test cases: * 0,1 or more nodes in the tree */ public class BinaryTreeToSortedLinkList { public Node toSortedLinkList(Node root){ if(root == null){ return null; } Node left = toSortedLinkList(root.left); Node right = toSortedLinkList(root.right); root.left = null; root.right = null; root = merge(left,root); return merge(root,right); } private Node merge(Node head1,Node head2){ if(head1 == null){ return head2; } if(head2 == null){ return head1; } if(head1.data <= head2.data){ head1.next = merge(head1.next, head2); return head1; }else{ head2.next = merge(head1,head2.next); return head2; } } private void print(Node root){ while(root != null){ System.out.print(root.data + " "); root = root.next; } } public static void main(String args[]){ int in[] = {-6,0,15,10,3,25,2}; int pre[] = {10,15,-6,0,25,3,2}; ConstructTreeFromInOrderPreOrder ct = new ConstructTreeFromInOrderPreOrder(); Node root = ct.createTree(in, pre); BinaryTreeToSortedLinkList bt = new BinaryTreeToSortedLinkList(); root = bt.toSortedLinkList(root); bt.print(root); } }