码迷,mamicode.com
首页 > 其他好文 > 详细

timus 1136 Parliament(思路过程)

时间:2014-12-18 20:42:29      阅读:145      评论:0      收藏:0      [点我收藏+]

标签:oj   acm   timus   c++   

该题的意思(具体可以进链接 http://acm.timus.ru/problem.aspx?space=1&num=1136 ):给出二叉树的先序遍历的顺序,输出该二叉树后序遍历的顺序(其中该二叉树的根节点大于左节点、小于右节点)!

刚看到该题目的思路是用这样的数组存储:int arr[3003][4];   

arr[i][0](i>=0&&i<=3000)存储第i个数的值

arr[i][1](i>=0&&i<=3000)存储第i个数的根节点的值

arr[i][2](i>=0&&i<=3000)存储第i个数的左节点的值

arr[i][2](i>=0&&i<=3000)存储第i个数的右节点的值

也可以写成结构体格式

struct Node

{

    int  key,left,right,root;

};

Node nn[3003];

按照这样的思路写出来对后续的更新是比较麻烦的

也想过用结构体指针去写,还是觉得比较繁琐!

后面改了种思路再写就发现简单多了

还是原来的数组 int arr[3003][4]

其中  arr[i][0](i>=0&&i<=3000)存储第i个数的值

arr[i][1](i>=0&&i<=3000)存储第i个数的根节点的位置

arr[i][2](i>=0&&i<=3000)存储第i个数的左节点的位置

arr[i][2](i>=0&&i<=3000)存储第i个数的右节点的位置

这样的存储也就有了和结构体指针等效的存储效果了。

第x个位置上的左节点的值 arr[arr[x][2]][0]

从第x个节点处找最顶层的父节点(假设所有的点都隶属一棵树),把根节点值赋给re(一个整数)

re=x;

while(arr[re][1]!=-1)   //第x个树根节点有值时,初始化数组值全为-1

{

    re=arr[re][1];

}

后面的比较好弄了,先建树,如果对结果不是很有把握,可以输入一个数便输出对应的数组数据存储情况!

数据没有错就写后序遍历输出最后结果就行了!

timus 1136 Parliament(思路过程)

标签:oj   acm   timus   c++   

原文地址:http://blog.csdn.net/quanqiuzhongzi/article/details/42009271

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!