public Node degenerate(Node root){
        if(root == null){
            return null;
        }
        
        Node left = root.left;
        Node right = root.right;
        root.left = null;
        root.right = null;
        left = degenerate(left);
        right = degenerate(right);
        left = merge(left, root);
        return merge(left, right);
    }
Date 03/16/2015
@author tusroy

Given a binary tree(not BST) convert it into sorted linklist.
e.g          10
         11        15
       8    9    16   13
                          7
                          
should become 7->8->9->10->11->13->15->16

Solution
Idea is that at every root, get the sorted linklist from left and right and merge them 
along with root and return left most element in this merged linklist to upper level call.

Test cases
1) Null root
2) One node root
3) BST 
4) Reverse BST
5) All on left side of root

Reference
http://www.careercup.com/question?id=6241652616200192
src/com/interview/tree/DegenerateBinaryTreeToSortedLL.java