求二叉树前序遍历程序(C或C++)

来源:百度知道 编辑:UC知道 时间:2024/05/21 22:43:26
用C或C++编写,具体题目如下:

Description
给定一棵有n个结点的二叉树,结点的编号为0~n-1。请你编写程序输出二叉树的前序遍历序列。

Input
输入的第一行是一个正整数t(1 < t < 20),表示有t组测试用例。
对于每组测试用例,第一行是一个整数n(0 < n < 20),表示二叉树结点个数。第二行是一个数r(0≤r≤n-1),二叉树根结点的编号。
后面有n-1行,表示二叉树n-1条边的信息。每行三个数a,b,c,三个数间由空格隔开,其中0≤a,b≤n-1且a≠b, c为0或1。a表示边的起点,b表示边的终点。如果c为0,表示b是a的左儿子;如果c为1,表示b是a的右儿子。

Output
对于每组测试用例输出一行,即:该二叉树的前序遍历序列,两个节点编号之间留一个空格。

Sample Input

2
3
2
2 0 0
2 1 1
7
0
0 1 0
0 2 1
1 3 0
1 4 1
2 5 0
2 6 1

Sample Output

2 0 1
0 1 3 4 2 5 6

#include "stdio.h"
#include "stdlib.h"
struct node{
int lc,rc;
}tree[1000];

void print(int root){
printf("%d ",root);
if(tree[root].lc!=-1)print(tree[root].lc);
if(tree[root].rc!=-1)print(tree[root].rc);
};

int main(){
int nop,n,root,i,t1,t2,t3;
scanf("%d",&nop);
while(nop!=0){

scanf("%d",&n);
scanf("%d",&root);
for(i=0;i<=n;i++){
tree[i].lc=-1;tree[i].rc=-1;
};
for(i=1;i<=n-1;i++){
scanf("%d",&t1);
scanf("%d",&t2);
scanf("%d",&t3);
if(t3==0)tree[t1].lc=t2;
else tree[t1].rc=t2;
};
print(root);
printf("\n");
nop--;
};

return 0;
};

#define AVL_WALK_BEGIN (head, node)\
{\
AVL_NODE *stack[50] = {0};\
AVL_NODE *tmp = N