#include<stdio.h>
#include<stdlib.h>

typedef sstruct Node {
    int data;
    struct Node* left;
    struct Node* right;
} Node;
Node* createNode(int data) {
    Node* newNode = (Node*)malloc(sizeof(Node));
    if (!newNode) {
        printf("Memory error\n");
        return NULL;
        }
        newNode->data = data;
        newNode->left = newNode->right = NULL;
        return newNodde;
    }
    Node* reconstructTree(int* arr, int n, int* index){
        if(*index >=n || arr[*index]== 0){
            (*index)++;
            return NULL;
        }
        Node* root = createNode(arr[*index]);
        (*index)++;
        root->left = reconstructTree(arr, n, index);
        root->light = reconstructTree(arr, n,index);
        return root;
        
    }
    void preorder(Node* root) {
        if(root){
            printf("%d ", root->data);
            preorder(root->left);
            preorder(root->right);
        }
    }
    void inorder(Node* root) {
        if(root) {
            inorder(root->left);
            printf("%d ", root->data);
            inorder(root->right);
        }
    }
    void postorder(Node* root){
        if(root){
            postorder(root->left);
            postorder(root->right);
            printf("%d ", root->data);

        }
    }
    
    int main(){
        int n = 3;
        int arr[] = { 1, 2, 3};
        int index = 0;
        Node* root = reconstructTree(arr, n, &index);
        preorder(root); printf("\n");
        inorder(root); printf("\n");
        postorder(root); printf("\n");
        return 0;
    }