Convert a Binary Tree into a Doubly Linked List - Visualization
Problem Statement
Examples
Solution
Algorithm Steps
Code
C
C++
Python
Java
JS
Go
Rust
Kotlin
TS
#include <stdio.h>
#include <stdlib.h>
typedef struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
} TreeNode;
TreeNode* createNode(int val) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = node->right = NULL;
return node;
}
TreeNode* treeToDLL(TreeNode* root) {
if (root == NULL) return NULL;
TreeNode* leftList = treeToDLL(root->left);
TreeNode* rightList = treeToDLL(root->right);
root->left = root->right = NULL;
TreeNode* head;
if (leftList) {
head = leftList;
TreeNode* tail = leftList;
while (tail->right) {
tail = tail->right;
}
tail->right = root;
root->left = tail;
} else {
head = root;
}
if (rightList) {
root->right = rightList;
rightList->left = root;
}
return head;
}
int main() {
TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->right->left = createNode(5);
root->right->right = createNode(6);
TreeNode* dllHead = treeToDLL(root);
TreeNode* curr = dllHead;
while (curr) {
printf("%d", curr->val);
if (curr->right) printf(" <-> ");
curr = curr->right;
}
printf("\n");
return 0;
}
Comments
Loading comments...