二叉树的镜像

来源:互联网 发布:中文建模软件 编辑:程序博客网 时间:2024/05/06 21:35

题目描述:
输入一个二叉树,输出其镜像。
这里写图片描述
输入:
输入可能包含多个测试样例,输入以EOF结束。对于每个测试案例,输入的第一行为一个整数n(0<=n<=1000,n代表将要输入的二叉树节点的个数(节点从1开始编号)。接下来一行有n个数字,代表第i个二叉树节点的元素的值。接下来有n行,每行有一个字母Ci。

Ci=’d’表示第i个节点有两子孩子,紧接着是左孩子编号和右孩子编号。
Ci=’l’表示第i个节点有一个左孩子,紧接着是左孩子的编号。
Ci=’r’表示第i个节点有一个右孩子,紧接着是右孩子的编号。
Ci=’z’表示第i个节点没有子孩子。

输出:
对应每个测试案例,按照前序输出其孩子节点的元素值。若为空输出NULL。

样例输入:
7
8 6 10 5 7 9 11
d 2 3
d 4 5
d 6 7
z
z
z
z
样例输出:
8 10 11 9 6 7 5

#include<stdio.h>#include<stdlib.h>#include<string.h>int NUM;//全局变量,用来控制输出格式typedef struct node{    int data;    struct node *lchild;    struct node *rchild;}tnode,*tree;void creatTree(tnode *T,int n){    for(int i=0;i<n;i++)    {        scanf("%d",&T[i].data);        T[i].lchild=NULL;        T[i].rchild=NULL;    }    char flag;    int index1,index2;    for(int i=0;i<n;i++)    {        scanf("\n%c",&flag);//必须加换行符,如果只按Enter键,就表示输入两个字符\r\n        switch(flag)        {            case 'd':                scanf("%d",&index1);                T[i].lchild=&T[index1-1];                scanf("%d",&index2);                T[i].rchild=&T[index2-1];                break;            case 'l':                scanf("%d",&index1);                T[i].lchild=&T[index1-1];                break;            case 'r':                scanf("%d",&index1);                T[i].rchild=&T[index1-1];                break;            case 'z':                break;        }    }}void mirrorTree(tnode *T){    tnode *p;    if(T)    {        p=T->lchild;        T->lchild=T->rchild;        T->rchild=p;        mirrorTree(T->lchild);        mirrorTree(T->rchild);    }}void printTree(tnode *T)//前序遍历{    if(T)    {        if(NUM-->1)              printf("%d ",T->data);          else              printf("%d\n",T->data); //最后一个数字没空格        printTree(T->lchild);        printTree(T->rchild);    }}int main(){    tnode  T[100];    int n;    while(scanf("%d",&n)!=EOF)    {        if(n==0)  printf("NULL\n");        else        {            NUM=n;            creatTree(T,n);            mirrorTree(T);            printTree(T);            printf("\n");        }    }}

总结:输出格式很重要

0 0
原创粉丝点击