7-1 交换二叉树中每个结点的左孩子和右孩子 (20 分)
题目:以二叉链表作为二叉树的存储结构,交换二叉树中每个结点的左孩子和右孩子。
输入格式:
输入二叉树的先序序列。
提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。
输出格式:
输出有两行:
第一行是原二叉树的中序遍历序列;
第二行是交换后的二叉树的中序遍历序列。
输入样例:
ABC##DE#G##F###
输出样例:
CBEGDFA
AFDGEBC
这是完整代码:
#include<stdio.h>
#include<stdlib.h>
typedef struct BiTNode
{
char data; //结点的值,char类型
struct BiTNode *lchild; //左孩子结点
struct BiTNode *rchild; //右孩子结点
}BiTNode,*BiTree; //*BiTree是结构体指针
//中序遍历输出 (左->根->右)
void zhongxu(BiTree T)
{
if(T!=NULL)
{
zhongxu(T->lchild);
printf("%c",T->data);
zhongxu(T->rchild);
}
}
//目的是交换结点
void swap(BiTree T)
{
if(T!=NULL)
{
BiTNode *m=T->lchild;/*这三行类似于"打擂台法"*/
T->lchild=T->rchild;
T->rchild=m;
swap(T->lchild);
swap(T->rchild);
}
}
void creat(BiTree *T) //创建二叉树
{
char ch;
scanf("%c",&ch);
if(ch=='#') //判断该字符ch是不是为'#',意思是该节点是不是空的
*T=NULL;
else
{
*T=(BiTree)malloc(sizeof(BiTNode)); //为结点T申请空间
(*T)->data=ch; //将ch的值赋给(*T)->data
creat(&(*T)->lchild);
creat(&(*T)->rchild);
}
}
int main()
{
BiTree T; //定义BiTree类型T
creat(&T);
zhongxu(T);
swap(T);
printf("\n");//换行,以免格式错误
zhongxu(T);
return 0;
}
欢迎你们的阅读,希望点个赞啦,谢谢。如果有错误的地方,还希望你能与我讨论一下,期待与你们的下次见面