参考资料来源: 交换二叉树孩子结点
#include <stdio.h>
#include <stdlib.h>
#include <iostream>
using namespace std;
typedef struct node
{
char data;
struct node *L_Kid,*R_Kid;
}Tree;
void initTree(Tree *&T)
{
char str;
cin>>str;
if(str!='#')
{
T=(Tree *)malloc(sizeof(Tree));
T->data=str;
initTree(T->L_Kid);
initTree(T->R_Kid);
}
else T=NULL;
}
void exchange_Kid(Tree *&T)
{
Tree *tmp;//临时储存要交换的树的孩子;
if(T!=NULL)
{
tmp=T->L_Kid;
T->L_Kid=T->R_Kid;
T->R_Kid=tmp;
exchange_Kid(T->L_Kid);
exchange_Kid(T->R_Kid);
}
}
void mid_Traverse(Tree *&T)
{
if(T!=NULL)
{
mid_Traverse(T->L_Kid);
cout<<T->data;
mid_Traverse(T->R_Kid);
}
}
void pro_Traverse(Tree *&T)
{
if(T!=NULL)
{
cout<<T->data;
pro_Traverse(T->L_Kid);
pro_Traverse(T->R_Kid);
}
}
int main()
{
Tree *T;
initTree(T);
exchange_Kid(T);
mid_Traverse(T);
cout<<endl;
pro_Traverse(T);
return 0;
}