Reverse Level Order Traversal of a Binary Tree using Recursion
Visualization Player
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, *right;
} TreeNode;
TreeNode* createNode(int val) {
TreeNode* node = (TreeNode*)malloc(sizeof(TreeNode));
node->val = val;
node->left = node->right = NULL;
return node;
}
void helper(TreeNode* node, int level, int levels[][100], int* levelSizes, int* maxLevel) {
if (!node) return;
if (level > *maxLevel) *maxLevel = level;
levels[level][levelSizes[level]++] = node->val;
helper(node->left, level + 1, levels, levelSizes, maxLevel);
helper(node->right, level + 1, levels, levelSizes, maxLevel);
}
int* reverseLevelOrder(TreeNode* root, int* returnSize) {
int levels[100][100];
int levelSizes[100] = {0};
int maxLevel = -1;
helper(root, 0, levels, levelSizes, &maxLevel);
int total = 0;
for (int i = 0; i <= maxLevel; i++) total += levelSizes[i];
int* result = malloc(total * sizeof(int));
int index = 0;
for (int i = maxLevel; i >= 0; i--) {
for (int j = 0; j < levelSizes[i]; j++) {
result[index++] = levels[i][j];
}
}
*returnSize = total;
return result;
}
int main() {
TreeNode* root = createNode(1);
root->left = createNode(2);
root->right = createNode(3);
root->left->left = createNode(4);
root->left->right = createNode(5);
root->right->left = createNode(6);
root->right->right = createNode(7);
int returnSize;
int* result = reverseLevelOrder(root, &returnSize);
for (int i = 0; i < returnSize; i++) {
printf("%d ", result[i]);
}
printf("\n");
free(result);
return 0;
}
Comments
Loading comments...