给定一棵大小为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);
}
如有帮助,望采纳!谢谢!