输入FCA##DB###EH##GM###创建二叉树
思路:利用二叉树的层次遍历,二叉树的根左右结点依次入队,入队的同时交换左右结点
#include <stdio.h>
#include <malloc.h>
//FCA##DB###EH##GM###
typedef struct BiTNode{
char data;
struct BiTNode *lchild,*rchild;
}BiTNode,*BiTree;
int front=0,rear=0;
int i=0;
BiTree CreateBiTree(){
BiTree T;
char c;
scanf("%c",&c);
if('#'==c){
T = NULL;
} else{
T=(BiTree)malloc(sizeof(BiTNode));
T->data = c;
T->lchild = CreateBiTree();//递归(栈)递推,回溯
T->rchild = CreateBiTree();
}
return T;
}
//入队函数
void EnQueue(BiTree *a,BiTree node){
a[rear++]=node;
}
//出队函数
BiTree DeQueue(BiTree* a){
return a[front++];
}
//输出函数
void displayNode(BiTree node){
printf("%c\n",node->data);
}
int main() {
BiTree tree;
tree = CreateBiTree();
BiTree p;
BiTree a[20];
//根结点入队
EnQueue(a, tree);
//当队头和队尾相等时,表示队列为空
while(front<rear) {
//队头结点出队
p=DeQueue(a);
displayNode(p);
//将队头结点的左右孩子依次入队
if (p->lchild!=NULL) {
EnQueue(a, p->lchild);
}
if (p->rchild!=NULL) {
EnQueue(a, p->rchild);
char t;
t = p->lchild->data;
p->lchild->data = p->rchild->data;
p->rchild->data = t;
}
}
return 0;
}