#include<iostream>
#include<stack>
using namespace std;
using std::stack;
typedef struct BTNode
{
int data;
BTNode *lchild;
BTNode *rchild;
}BTNode;
BTNode *Create()
{
int ch;
cin>>ch;
if(ch == 0) return NULL;
else
{
BTNode *bt = new BTNode();
bt->data = ch;
bt->lchild = Create();
bt->rchild = Create();
return bt;
}
}
void ReverseRecur(BTNode *bt) //递归
{
if(bt == NULL) return ;
BTNode *temp = bt->lchild;
bt->lchild = bt->rchild;
bt->rchild = temp;
if(bt->lchild)
{
ReverseRecur(bt->lchild);
}
if(bt->rchild)
{
ReverseRecur(bt->rchild);
}
}
void MirrorIteratively(BTNode *pNode) //非递归
{
if(pNode == NULL) return ;
stack<BTNode *> stackTreeNode;
stackTreeNode.push(pNode);
while(stackTreeNode.size())
{
BTNode *pNode = stackTreeNode.top();
stackTreeNode.pop();
//交换左右孩子
BTNode *pTemp = pNode->lchild;
pNode->lchild = pNode->rchild;
pNode->rchild = pTemp;
if(pNode->lchild)
{
stackTreeNode.push(pNode->lchild);
}
if(pNode->rchild)
{
stackTreeNode.push(pNode->rchild);
}
}
}
void Print(BTNode *bt)
{
if(bt == NULL) return ;
cout<<bt->data<<" ";
Print(bt->lchild);
Print(bt->rchild);
}
int main()
{
BTNode *bt = NULL;
bt = Create();
cout<<"先序输出:"<<endl;
Print(bt);
cout<<endl;
cout<<"求镜像,输出:"<<endl;
//ReverseRecur(bt);
MirrorIteratively(bt);
Print(bt);
cout<<endl;
cout<<"再次求镜像,输出:"<<endl;
ReverseRecur(bt);
Print(bt);
return 0;
}
#include<stack>
using namespace std;
using std::stack;
typedef struct BTNode
{
int data;
BTNode *lchild;
BTNode *rchild;
}BTNode;
BTNode *Create()
{
int ch;
cin>>ch;
if(ch == 0) return NULL;
else
{
BTNode *bt = new BTNode();
bt->data = ch;
bt->lchild = Create();
bt->rchild = Create();
return bt;
}
}
void ReverseRecur(BTNode *bt) //递归
{
if(bt == NULL) return ;
BTNode *temp = bt->lchild;
bt->lchild = bt->rchild;
bt->rchild = temp;
if(bt->lchild)
{
ReverseRecur(bt->lchild);
}
if(bt->rchild)
{
ReverseRecur(bt->rchild);
}
}
void MirrorIteratively(BTNode *pNode) //非递归
{
if(pNode == NULL) return ;
stack<BTNode *> stackTreeNode;
stackTreeNode.push(pNode);
while(stackTreeNode.size())
{
BTNode *pNode = stackTreeNode.top();
stackTreeNode.pop();
//交换左右孩子
BTNode *pTemp = pNode->lchild;
pNode->lchild = pNode->rchild;
pNode->rchild = pTemp;
if(pNode->lchild)
{
stackTreeNode.push(pNode->lchild);
}
if(pNode->rchild)
{
stackTreeNode.push(pNode->rchild);
}
}
}
void Print(BTNode *bt)
{
if(bt == NULL) return ;
cout<<bt->data<<" ";
Print(bt->lchild);
Print(bt->rchild);
}
int main()
{
BTNode *bt = NULL;
bt = Create();
cout<<"先序输出:"<<endl;
Print(bt);
cout<<endl;
cout<<"求镜像,输出:"<<endl;
//ReverseRecur(bt);
MirrorIteratively(bt);
Print(bt);
cout<<endl;
cout<<"再次求镜像,输出:"<<endl;
ReverseRecur(bt);
Print(bt);
return 0;
}