交换二叉树的左右子树
#include<iostream>
#include<queue>
#include<stack>
using namespace std;
typedef struct node{
char data;
struct node *lchild,*rchild;
}*BiTree;
//递归建立二叉树(先序遍历)
void CreatBiTree(BiTree &T){
char c;
cin>>c;
if(c=='0'){
T=NULL;
}else{
T=new node;
T->data=c;
CreatBiTree(T->lchild);
CreatBiTree(T->rchild);
}
}
//交换二叉树的左右子树
//1.递归算法
void swap(BiTree T){
BiTree temp;
if(T!=NULL){
swap(T->lchild);
swap(T->rchild);
temp=T->lchild;
T->lchild=T->rchild;
T->rchild=temp;
}
}
//2.层序遍历交换二叉树的左右子树
void swap1(BiTree T){
queue<BiTree> Q;
Q.push(T);
BiTree p;
BiTree temp;
while(!Q.empty()){
p=Q.front();
Q.pop();
temp=p->lchild;
p->lchild=p->rchild;
p->rchild=temp;
if(p->lchild!=NULL){
Q.push(p->lchild);
}
if(p->rchild!=NULL){
Q.push(p->rchild);
}
}
}
//先序遍历递归
void PreOrder(BiTree T){
if(T!=NULL){
cout<<T->data<<' ';
PreOrder(T->lchild);
PreOrder(T->rchild);
}
}
int main(){
BiTree T;
CreatBiTree(T);
PreOrder(T);
cout<<endl;
swap(T);
PreOrder(T);
cout<<endl;
swap1(T);
PreOrder(T);
cout<<endl;
return 0;
}
主函数
int main(){
system("chcp 65001");
BiTree T;
CreatBiTree(T);
cout<<"二叉树的先序遍历序列:"<<endl;
PreOrder(T);
cout<<endl;
cout<<"(递归算法)交换二叉树的左右子树后的先序遍历序列:"<<endl;
swap(T);
PreOrder(T);
cout<<endl;
cout<<"(层次遍历)交换二叉树的左右子树后的先序遍历序列:"<<endl;
swap1(T);
PreOrder(T);
cout<<endl;
return 0;
}
运行结果如下图所示: