您的位置:首页 > 理论基础 > 数据结构算法

HDU 1710-Binary Tree Traversals

2010-05-29 15:07 267 查看
好久没好好AC了, 这学期的数据结构也没好好学。恶补ing...

 

题目大意:告诉二叉树的先序序列和中序序列,求后序序列。

思路:先序建立二叉链表,再后续遍历二叉树。

 

#include <cstdio>
using namespace std;
typedef struct Binary
{
int data;
Binary *lchild, *rchild;
Binary()
{
lchild = NULL;
rchild = NULL;
}
}*BitTree;
int pre[1010], in[1010];
void Build(BitTree &root, int len, int pst, int ped, int inst, int ined)//先序建树
{
int i, l_len = 0;
if (len <= 0)
return ;
root = new Binary;
root->data = pre[pst];
for (i = inst; i <= ined; i++)
{
if (in[i] == pre[pst])
{
l_len = i - inst;
break;
}
}
Build(root->lchild, l_len, pst+1, pst+l_len, inst, i-1);
Build(root->rchild, len-1-l_len, pst+l_len+1, ped, i+1, ined);
}
void Travel(Binary *root)//后序遍历
{
int i;
if (root)
{
Travel(root->lchild);
Travel(root->rchild);
printf("%d ", root->data);
}
}
int main()
{
int i, n;
BitTree root;

while (scanf("%d", &n) != EOF)
{
for (i = 0; i < n; i++)
{
scanf("%d", &pre[i]);
}
for (i = 0; i < n; i++)
{
scanf("%d", &in[i]);
}
Build(root, n, 0, n-1, 0, n-1);
Travel(root->lchild);
Travel(root->rchild);
printf("%d/n", root->data);
}
return 0;
}
 

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息