二叉树的遍历,用C语言怎么写?

给定一棵大小为n的树,分别输出该树的前序遍历、中序遍历、后序遍历。(其中二叉树的根始终为0号节点)
输入:
输入第一行一个整数n代表树的大小
接下来n行每行三个整数,分别代表节点的下标,以及该节点左儿子的下标和右儿子的下标。其中-1代表节点为NULL
输入样例:
7
0 1 2
1 -1 -1
2 3 4
3 -1 5
4 -1 -1
5 6 -1
以及,输入样例是按层建立树吗?

你题目的解答代码如下:

#include <stdio.h>
#include <malloc.h>
#include <stdlib.h>
typedef struct BiTNode
{
    int data;
    struct BiTNode *lchild, *rchild;
} BiTNode, *BiTree;


int PreOrder(BiTree T)
{
    if (!T)
        return 0;
    printf("%d ", T->data);
    PreOrder(T->lchild);
    PreOrder(T->rchild);
    return 1;
}
int InOrder(BiTree T)
{
    if (!T)
        return 0;
    InOrder(T->lchild);
    printf("%d ", T->data);
    InOrder(T->rchild);
    return 1;
}
int PostOrder(BiTree T)
{
    if (!T)
        return 0;
    PostOrder(T->lchild);
    PostOrder(T->rchild);
    printf("%d ", T->data);
    return 1;
}
void main()
{
    int n,i,k,l,r;
    BiTree T,p;
    scanf("%d", &n);
    BiTree *a[n];
    a[0] = &T;
    for (i = 0; i < n; i++)
    {
        scanf("%d%d%d", &k, &l, &r);
        p = (BiTNode *)malloc(sizeof(BiTNode));
        p->lchild = NULL;
        p->rchild = NULL;
        p->data = k;
        *(a[k]) = p;
        if (l!=-1)
            a[l] = &p->lchild;
        if (r!=-1)
            a[r] = &p->rchild;
    }
    printf("先序遍历:");
    PreOrder(T);
    printf("\n中序遍历:");
    InOrder(T);
    printf("\n后序遍历:");
    PostOrder(T);
}

如有帮助,望采纳!谢谢!