package com.interview.tree; /** * http://cslibrary.stanford.edu/109/TreeListRecursion.html * Test cases * Null tree * */ public class BinaryTreeToCircularLinkList { public Node convert(Node root){ if(root == null){ return null; } if(root.left == null && root.right == null){ root.left = root; root.right = root; return root; } Node left = convert(root.left); Node right = convert(root.right); root.left = root; root.right = root; left = join(left,root); left = join(left,right); return left; } private Node join(Node r1, Node r2){ if(r1 == null){ return r2; } if(r2 == null){ return r1; } Node t1 = r2.left; r1.left.right = r2; r2.left = r1.left; r1.left = t1; t1.right = r1; return r1; } private void print(Node root){ Node temp = root; do{ System.out.println(temp.data); temp = temp.right; }while(temp != root); System.out.println(); do{ System.out.println(temp.data); temp = temp.left; }while(temp != root); } public static void main(String args[]){ BinaryTreeToCircularLinkList btc = new BinaryTreeToCircularLinkList(); BinaryTree bt = new BinaryTree(); Node root = null; root = bt.addNode(10, root); root = bt.addNode(3, root); root = bt.addNode(-1, root); root = bt.addNode(8, root); root = bt.addNode(-6, root); root = bt.addNode(13, root); root = btc.convert(root); btc.print(root); } }