题目:
编写递归算法,将二叉树的所有节点的左、右子树相互交换
//题目:利用递归交换二叉树每个结点的左右子树
//总结:使用先序递归/后序递归,不能使用中序递归
#include<iostream>
#include<stack>
using namespace std;
#define TElemType double
typedef struct BiTNode
{
TElemType data;
bool flag;
struct BiTNode* lchild,* rchild;
}BiTNode,* BiTree;
void Creat_BiTree(BiTree& T)//创建二叉树
{
TElemType num;
if(cin>>num){
T=new BiTNode;
if(!T) exit(-2);
T->data=num;
Creat_BiTree(T->lchild);
Creat_BiTree(T->rchild);
}
if(!cin){
T=nullptr;
cin.clear();
cin.sync();
}
}
void PostOrder_UsingStack(BiTree T)//后序非递归遍历
{
stack<BiTree> S;
BiTree p=T;
while(p||!S.empty()){
while(p){
p->flag=true;
S.push(p);
p=p->lchild;
}
while(!S.empty()&&!S.top()->flag){
cout<<S.top