При выводе бинарного дерева в печать два раза выводиться максимальное значение массива

#include <stdio.h>
#include <stdlib.h>

typedef struct balanceWood {
    struct balanceWood *left;
    struct balanceWood *right;
    int value;
} BalanceWood;

//BalanceWood *Root = NULL;

BalanceWood *AddBranch(BalanceWood *Root, int field) {
    if(Root == NULL) {
        BalanceWood *Root = malloc(sizeof(BalanceWood));
        Root->value = field;
        Root->left = Root->right = NULL; 
        return Root;
    } else 
        if(field < Root->value)
            Root->left = AddBranch(Root->left, field);
        else
            Root->right = AddBranch(Root->right, field);
    return Root;
}

void ArrWood(BalanceWood *Root, int a[]) {
    int count = 0;
    if(Root == NULL) return;
    ArrWood(Root->left, a);
    a[count++] = Root->value;
    ArrWood(Root->right, a);
    free(Root);
}

void SortWood(int Elem, int a[]) {
    BalanceWood *Root;
    int i;
    Root = NULL;
    for(int i = 0; i < Elem; i++)
    Root = AddBranch(Root, a[i]);
    ArrWood(Root, a);
}


void PrintWood(BalanceWood *Root) {
    if(Root != NULL) {
        PrintWood(Root->left);
            printf("%d-->", Root->value);
        PrintWood(Root->right);
    }
}

int main() {
    int a[] = {3,4,7,56,89,5,565, 90};
    BalanceWood *Root = NULL;
    int c = sizeof(a)/sizeof(a[0]);
    SortWood(c, a);
    for (int i = 0; i< c /*sizeof(a)/sizeof(a[0])*/; i++) //{
        //BalanceWood * Elem = CreateRoot(a[i]);
        //AddBranch(Root, a[i]);
    //}
    //PrintWood(Root);
    printf("%d-->", a[i]);
    printf("\n");
    return 0;
}

Результат выполнения


Ответы (0 шт):