Search code examples
cpreorder

Pre/In/Postfix traversal in C including an Array


I would like to implement functions where I perform a pre, in and postorder traversal of an existing binary tree.

these traversals should then be displayed by a predefined test function

here's what i got so far for the preorder traversal

uint64_t i = 0;
int *binarytree_prefix(binarytree *tree) {
    uint64_t *prefixArray = malloc(inputArrayLength_helper * sizeof(uint64_t));

    prefixArray[i] = tree->value;
    i++;
    if (tree->left != NULL) {
        return (binarytree_prefix(tree->left));
    }

    if (tree->right != NULL) {
        return (binarytree_prefix(tree->right));
    }
}

what I thought about it that it would insert the value of the current node into the array and then increent the position within the array and do a recursion on the left and then the right tree however this does not work. i hope someone is able to help me to make it running

What i did was a depth first search with a preorder traversal and then included the array to fill it with the current value

test function within main:

int *prefixArray = bintree_prefix(tree);

printf("Prefix notation : ");
for(uint64_t i = 0; i < inputArrayLength; i++) {
    printf(" %d", prefixArray[i]);
}
printf("\n");

free(prefixArray);

Solution

  • ok after a few different variations of the code i finally got the right solution

    for those interested

    int *bintree_prefix(bintree *tree)
    {
    int *prefixArray = malloc(17*sizeof(uint64_t));
    return (bintree_prefix_visited(tree, prefixArray));
    }
    int bintree_prefix_visited(bintree *tree, int *prefixArray)
    {
    if (tree!=NULL)
        {
        prefixArray[a]=tree->value;
        a++;
        bintree_prefix_visited(tree->left, prefixArray);
        bintree_prefix_visited(tree->right, prefixArray);
        }
    return prefixArray;
    }