您的位置:首页 > 其它

二叉树的镜像

2015-06-30 15:01 295 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: