DSA Series Chapter 28 : Convert Binary Tree to Doubly Linked List (DLL)(C Version (Inorder Conversion)

 

[Follow here] for daily coding insights

DSA Series Chapter 28 : Convert Binary Tree to Doubly Linked List (DLL)(C Version (Inorder Conversion)


1. Objective

To convert a Binary Tree into a Doubly Linked List (DLL) such that:

  • DLL nodes follow inorder sequence of the binary tree

  • Conversion is done in-place (no new nodes created)


2. Definition (Exam-Oriented)

Converting a binary tree to a doubly linked list means rearranging the tree pointers so that:

  • left pointer acts as prev

  • right pointer acts as next

  • Nodes appear in inorder traversal order


3. Example

Binary Tree

        10
       /  \
      5    20
     / \
    3   8

Inorder Traversal

3 5 8 10 20

Resulting DLL

NULL <-> 3 <-> 5 <-> 8 <-> 10 <-> 20 <-> NULL

4. Key Observations

  • Inorder traversal gives sorted order for BST

  • We maintain:

    • prev → previously processed node

    • head → first node of DLL


5. Core Idea

  • Perform inorder traversal

  • Link current node with prev

  • Update prev after each visit


6. Node Structure

struct Node
{
    int data;
    struct Node *left;
    struct Node *right;
};

7. Conversion Function

void convertToDLL(struct Node* root, struct Node** head, struct Node** prev)
{
    if (root == NULL)
        return;

    convertToDLL(root->left, head, prev);

    if (*prev == NULL)
        *head = root;
    else
    {
        root->left = *prev;
        (*prev)->right = root;
    }

    *prev = root;

    convertToDLL(root->right, head, prev);
}

8. Line-by-Line Explanation

  • Traverse left subtree

  • If first node, assign as head

  • Else connect:

    • current->left = prev

    • prev->right = current

  • Update prev

  • Traverse right subtree


9. Complete C Program

#include <stdio.h>
#include <stdlib.h>

struct Node
{
    int data;
    struct Node *left;
    struct Node *right;
};

struct Node* createNode(int data)
{
    struct Node* node = (struct Node*)malloc(sizeof(struct Node));
    node->data = data;
    node->left = NULL;
    node->right = NULL;
    return node;
}

void convertToDLL(struct Node* root, struct Node** head, struct Node** prev)
{
    if (root == NULL)
        return;

    convertToDLL(root->left, head, prev);

    if (*prev == NULL)
        *head = root;
    else
    {
        root->left = *prev;
        (*prev)->right = root;
    }

    *prev = root;

    convertToDLL(root->right, head, prev);
}

void printDLL(struct Node* head)
{
    struct Node* temp = head;
    while (temp)
    {
        printf("%d ", temp->data);
        temp = temp->right;
    }
}

int main()
{
    struct Node* root = createNode(10);
    root->left = createNode(5);
    root->right = createNode(20);
    root->left->left = createNode(3);
    root->left->right = createNode(8);

    struct Node* head = NULL;
    struct Node* prev = NULL;

    convertToDLL(root, &head, &prev);

    printf("Doubly Linked List: ");
    printDLL(head);

    return 0;
}

10. Output

Doubly Linked List: 3 5 8 10 20

11. Time and Space Complexity

  • Time Complexity: O(n)

  • Space Complexity: O(h)


ALSO CHECK 

DS(Data Structure) Python&C Edition

DSA Series Chapter 1 Time & Space Complexity ( C Edition)

DSA Series Chapter 2 Arrays  (C Version)


DSA Series Chapter 2 Arrays  (Python Version)

DSA Series Chapter 3 Strings (C Version)


DSA Series Chapter 3 Strings (Python Version)


DSA Series Chapter 4 Linked Lists (Python Version)


DSA Series Chapter 4 Linked Lists (C Version)


DSA Series Chapter 5 Stacks (Python Version)


DSA Series Chapter 5  Stacks  (C Version)




















DSA Series Chapter 13 - Binary Tree traversal, BFS, DFT/DFS, Preorder Traversal In Binary Tree


DSA Series Chapter 14 - InOrder Traversal (Binary Tree C Version)


DSA Series Chapter 14 - InOrder Traversal (Binary Tree Python Version)

 

DSA Series Chapter 15 – POSTORDER TRAVERSAL (BINARY TREE)(Python Version)


DSA Series Chapter 15 – POSTORDER TRAVERSAL (BINARY TREE)(C Version)


DSA Series Chapter 16 – LEVEL ORDER TRAVERSAL(BINARY TREE BFS)(C Version)


DSA Series Chapter 16 – LEVEL ORDER TRAVERSAL(BINARY TREE BFS)(Python Version)



DSA Series Chapter 19 : DELETION IN BINARY TREE(C Version)

DSA Series Chapter 19 : DELETION IN BINARY TREE(Python Version)


DSA Series Chapter 20 – HEIGHT OF BINARY TREE(C Version)

DSA Series Chapter 20 – HEIGHT OF BINARY TREE(Python Version)

DSA Series Chapter 21 : COUNT TOTAL NODES IN BINARY TREE(C Version)

DSA Series Chapter 21 : COUNT TOTAL NODES IN BINARY TREE(Python Version)
















Tail Recursion Optimization: How Compilers Convert Recursion Into Iteration


Advanced Recursion: Memoization vs. Tabulation — The Deep Optimization Blueprint for Professionals


Advanced Sorting Algorithms: Merge Sort Internals — Merge Tree, Cache Behavior & Real Cost Analysis


Enjoyed this post? [Follow here] for daily coding insights

Comments