#include <iostream>
#include <string.h>
#include <string>
#include <queue>
#include <stack>
using namespace std;
string s;
struct node
{
char data;
struct node * left;
struct node * right;
};
node * creatBTree()
{
if(s.size() == 0)
return NULL;
node * tt = NULL;
if(s[0] == '#')
{
s = s.substr(1, s.size() - 1);
return NULL;
}
else
{
tt = new node;
tt->data = s[0];
s = s.substr(1, s.size() - 1);
tt->left = creatBTree();
tt->right = creatBTree();
}
return tt;
}
void printPre(node * p)
{
if(p)
{
cout<<p->data;
printPre(p->left);
printPre(p->right);
}
}
/*
void fanzhuan(node * pp)
{
if(pp)
{
cout<<pp->data;
fanzhuan(pp->right);
fanzhuan(pp->left);
}
}
*/
void fanzhuan1(node * pp)
{
if(pp->left)
fanzhuan1(pp->left);
if(pp->right)
fanzhuan1(pp->right);
node * tmp = pp->left;
pp->left = pp->right;
pp->right = tmp;
}
void fanzhuan2(node * pp)
{
queue<node *> q;
q.push(pp);
while(!q.empty())
{
node * r = q.front();
q.pop();
if(r->left)
q.push(r->left);
if(r->right)
q.push(r->right);
node * tmp = r->left;
r->left = r->right;
r->right = tmp;
}
}
void fanzhuan3(node * pp)
{
node * tmp = pp;
stack<node *> st;
while(!st.empty() || tmp)
{
while(tmp)
{
st.push(tmp);
tmp = tmp->left;
}
node * t = st.top();
st.pop();
tmp = t->right;
pp = t->left;
t->left = t->right;
t->right = pp;
}
}
int main()
{
cin>>s;
node * t = creatBTree();
//printPre(t);
fanzhuan3(t);
printPre(t);
return 0;
}
二叉树的镜像
最新推荐文章于 2021-02-25 07:49:21 发布