题目:
请完成一个函数,输入一个二叉树,该函数输出它的镜像。
题目解析:
看到题目比较简单,不要一开始就立即上手写框架,写代码。最好画出示例图,对照示例图来写代码更准确。也能帮助分析题目的思路。
完整代码如下:
#include <stdio.h>
#include <stdlib.h>
typedef struct BiTNode{
int data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
void MirrorRecursively(BiTree T);
void PreOrderTraverse(BiTree T);
void CreateBiTree(BiTree *T);
int main()
{
BiTree T;
int n;
printf("input a number:");
while(scanf("%d",&n) == 1){
CreateBiTree(&T);
PreOrderTraverse(T);
MirrorRecursively(T);
PreOrderTraverse(T);
}
return 0;
}
//镜像变换
void MirrorRecursively(BiTree T)
{
if(T){
BiTree temp = T->lchild;
T->lchild = T->rchild;
T->rchild = temp;
MirrorRecursively(T->lchild);
MirrorRecursively(T->rchild);
}
}
//前序遍历输出
void PreOrderTraverse(BiTree T)
{
if(T){
printf("%d ",T->data);
PreOrderTraverse(T->lchild);
PreOrderTraverse(T->rchild);
}
}
//创建二叉树,输入0表示数据位空,产生空指针
void CreateBiTree(BiTree *T)
{
int data;
scanf("%d",&data);
if(data == 0)
*T = NULL;
else{
*T = (BiTree)malloc(sizeof(BiTNode));
if(!*T)
exit(-1);
(*T)->data = data;
CreateBiTree(&((*T)->lchild));
CreateBiTree(&((*T)->rchild));
}
}