package com.interview.tree; /** * http://www.geeksforgeeks.org/convert-given-binary-tree-doubly-linked-list-set-3/ */ public class BinaryTreeToDoubleLinkList { public void toDoubleLL(Node root){ NodeRef prev = new NodeRef(); toDoubleLL(root,prev); } private void toDoubleLL(Node root, NodeRef prev){ if(root == null){ return; } toDoubleLL(root.left,prev); if(prev.node != null){ prev.node.right = root; root.left = prev.node; prev.node = root; }else{ prev.node = root; } toDoubleLL(root.right,prev); } public void print(Node root){ Node curr = null; while(root != null){ curr = root; System.out.print(root.data + " "); root = root.right; } System.out.println(); root = curr; while(root != null){ System.out.print(root.data + " "); root = root.left; } } public static void main(String args[]){ BinaryTreeToDoubleLinkList btd = new BinaryTreeToDoubleLinkList(); BinaryTree bt = new BinaryTree(); Node head = null; head = bt.addNode(100, head); head = bt.addNode(90, head); head = bt.addNode(10, head); head = bt.addNode(15, head); head = bt.addNode(25, head); head = bt.addNode(5, head); head = bt.addNode(7, head); head = bt.addNode(-7, head); btd.toDoubleLL(head); btd.print(head); } }