Postorder Traversal of a Binary Tree - Iteration - Visualization
Visualization Player
Problem Statement
Examples
Solution
Algorithm Steps
Code
C
C++
Python
Java
JS
Go
Rust
Kotlin
Swift
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;
}
int* postorderTraversal(TreeNode* root, int* returnSize) {
if (!root) {
*returnSize = 0;
return NULL;
}
TreeNode** stack1 = malloc(100 * sizeof(TreeNode*));
TreeNode** stack2 = malloc(100 * sizeof(TreeNode*));
int top1 = -1, top2 = -1;
stack1[++top1] = root;
while (top1 >= 0) {
TreeNode* node = stack1[top1--];
stack2[++top2] = node;
if (node->left) stack1[++top1] = node->left;
if (node->right) stack1[++top1] = node->right;
}
int* result = malloc(100 * sizeof(int));
int index = 0;
while (top2 >= 0) {
result[index++] = stack2[top2--]->val;
}
*returnSize = index;
free(stack1);
free(stack2);
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);
int returnSize;
int* res = postorderTraversal(root, &returnSize);
printf("Postorder Traversal: ");
for (int i = 0; i < returnSize; i++) {
printf("%d ", res[i]);
}
printf("\n");
free(res);
return 0;
}
Comments
Loading comments...