您的位置:首页 > 其它

Ural 1136. Parliament

2010-11-04 19:37 323 查看
应该算是一道数据结构题吧,但是放到了ural的图论专区了,给出一棵二叉搜索树按左、右、中的顺序输出的序列,求按右、左、中顺序输出的序列。解法是对于二叉搜索树后序输出的序列,将序列从后到前的顺序加入二叉搜索树,就可以还原出树来(同样对于先序的序列,可以从前到后加入),建好树后,再按右、左、中顺序输出,就可以了。当然,也可以不建树,直接递归模拟出来。

#include <cstdio>
using namespace std;

int dat[3002];
bool flag;

struct Node
{
int data;
Node *LeftChild,*RightChild;

Node(int e)
{
data=e;
LeftChild=RightChild=0;
}
};

struct BinaryTree
{
Node *root;
BinaryTree()
{
root=0;
}
void Insert(int x)
{
Node *p=root;
Node *pp=0;
while(p)
{
pp=p;
if(x<p->data)
p=p->LeftChild;
else
p=p->RightChild;
}
Node *r=new Node(x);
if(root)
{
if(x<pp->data)
pp->LeftChild=r;
else
pp->RightChild=r;
}
else
root=r;
}
void PostOrder(Node *u)
{
if(u)
{
PostOrder(u->RightChild);
PostOrder(u->LeftChild);
if(!flag)
{
printf("%d",u->data);
flag=true;
}
else
printf(" %d",u->data);
}
}
};

int main(void)
{
int n;
while(scanf("%d",&n)!=EOF)
{
BinaryTree b;
for(int i=0;i<n;++i)
scanf("%d",&dat[i]);
for(int i=n-1;i>=0;--i)
b.Insert(dat[i]);
flag=false;
b.PostOrder(b.root);
}
return 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: