Given a binary tree, convert it to double linked list

     10

/ \

5 15

/ / \

2 7 12 20

2<->5<->7<->10<->12<->15<->20

key point:

inorder traverse + right as next, left as prev

we must know which node is previous node

know which node is the new head

public class BinaryTreeSerilization {
    TreeNode prev = null;



    public TreeNode BinaryTree2DoubleLinkedList(TreeNode root) {

        // left as prev pointer

        // right as next pointer in double linked list



        if (root == null) {

            return root ;

        }

        //TreeNode head = null;

        TreeNode dummyHead = new TreeNode(0);

        convert2DLL(root,dummyHead);

        TreeNode newHead = dummyHead.right;

        newHead.left = null;

        return newHead;

    }



    private void convert2DLL(TreeNode root,TreeNode head) {

        //base case

        if (root == null) {
            return;
        }

        convert2DLL(root.left,head);

        if (prev == null) {
                head.right = root;
                root.left =  head;
        } else {
                root.left = prev;
                prev.right = root;
        }
        prev = root;

        //System.out.format("%d, %d,",head.key,prev.key);
        convert2DLL(root.right,head);

    }
   }

results matching ""

    No results matching ""