以二叉链表作为二叉树的存储结构,交换二叉树中每个结点的左孩子和右孩子。
输入格式:
输入二叉树的先序序列。
提示:一棵二叉树的先序序列是一个字符串,若字符是‘#’,表示该二叉树是空树,否则该字符是相应结点的数据元素。
输出格式:
输出有两行:
第一行是原二叉树的中序遍历序列;
第二行是交换后的二叉树的中序遍历序列。
输入样例:
ABC##DE#G##F###
输出样例:
CBEGDFA
AFDGEBC
代码长度限制
16 KB
时间限制
400 ms
内存限制
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define Status int
#define OK 1
#define ERROR 0
#define MAXSIZE 100
typedef char TElemType;
//定义二叉树结构
typedef struct BiNode
{
TElemType data;
struct BiNode *lchild, *rchild;
}BiNode, *BiTree;
//二叉树的存储结构
//二叉树
void CreatBiTree(BiTree *T)
{
char ch;
scanf("%c", &ch);
if(ch == '#')
{
*T = NULL;
}
else
{
*T = (BiTree)malloc(sizeof(BiNode));
(*T)->data = ch;
CreatBiTree(&(*T)->lchild);
CreatBiTree(&(*T)->rchild);
}
}
//中序遍历二叉树
void InOrderTraverse(BiTree T)
{
if(T)
{
InOrderTraverse(T->lchild);
printf("%c", T->data);
InOrderTraverse(T->rchild);
}
}
//交换左孩子和右孩子
void swap(BiTree T)
{
//如果T不存在,就返回
if(!T) return;
//如果T的左右子树都不存在就返回
if(!T->lchild && !T->rchild) return;
//左右子树交换
BiTree tmp = T->lchild;
T->lchild = T->rchild;
T->rchild = tmp;
swap(T->lchild);
swap(T->rchild);
}
int main()
{
BiTree T;
CreatBiTree(&T);
if(T)
{
InOrderTraverse(T);
printf("\n");
swap(T);
InOrderTraverse(T);
}
return 0;
}