gplt L2-006. 树的遍历(后序中序求层序)

来源:互联网 发布:网络刷手一天能挣多少 编辑:程序博客网 时间:2024/05/22 10:23


https://www.patest.cn/contests/gplt/L2-006

题意:给出中序后序求层序。


思路:本来hdu1710已经模仿了别人代码了,考虑到前序后序也就顺序不同,没看资料自己改,就是通过后序找到根,然后用中序扩充嘛。

结果怎么也调不出来,下标应该已经对了啊,没道理啊。。结果前前后后调试一个多小时。。都快绝望了。。

。。。

居然是postorder[number-1]==inorder[i]这里的number必须是总元素数量不能改变。。

我宛若一个智障。。



#include <stdio.h>#include <algorithm>#include <string.h>#include <queue>#include <iostream>using namespace std;typedef long long ll;const int N = 35;typedef struct Tree{    Tree *left;    Tree *right;    int val;}Tree;Tree *root;int number;//代表元素数量int cnt;Tree* creat(int *postorder, int *inorder, int n)//前序、后序和子树长度{    Tree *tmp;    for(int i = 0; i < n; i++)    {        if(postorder[number-1]==inorder[i])//在中序中找到这个根节点        {            tmp = (Tree*)malloc(sizeof(Tree));            tmp->val = inorder[i];            tmp->left = creat(postorder-(n-i), inorder, i);            tmp->right = creat(postorder-1, inorder+i+1, n-(i+1));            return tmp;        }    }    return NULL;}void levelorder(Tree *cur){    cnt = 0;    queue<Tree*>que;    while(!que.empty()) que.pop();    que.push(cur);    Tree *node;    while(!que.empty())    {        node = que.front();        que.pop();        if(cnt == number-1) printf("%d\n", node->val);        else        {            printf("%d ", node->val);            cnt++;        }        if(node->left != NULL) que.push(node->left);        if(node->right != NULL) que.push(node->right);    }}int main(){  //  freopen("in.txt", "r", stdin);    int postorder[N], inorder[N];    int n;    while(~scanf("%d", &n))    {        number = n;        for(int i = 0; i < n; i++)            scanf("%d", &postorder[i]);        for(int i = 0; i < n; i++)            scanf("%d", &inorder[i]);        root = creat(postorder, inorder, n);        levelorder(root);    }}


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 吐出黄水苦水是怎么办 喝酒喝的一直吐怎么办 孕期总胆汁酸高怎么办 孕早期胆汁酸高怎么办 孕妇总胆汁酸高怎么办 宝宝一天吐了6次怎么办 肛周脓肿破了怎么办 肛周脓肿发烧了怎么办 肛周脓肿便血该怎么办 婴儿得肛周脓肿怎么办 水痘长在龟头上怎么办 轻度萎缩性胃炎伴肠化怎么办 肺癌晚期腿肿了怎么办 胸骨剑突按压痛怎么办 22岁有白头发怎么办 血热导致掉头发怎么办 36岁脱发严重该怎么办 血热引起的脱发怎么办 头发掉的好厉害怎么办 胃热导致的口臭怎么办 肝火和胃火旺盛怎么办 2月宝宝舌苔厚白怎么办 小孩舌头咬破了怎么办 两岁宝宝不说话怎么办 4岁半说话不清楚怎么办 10小孩说话不清怎么办 2岁宝宝说话结巴怎么办 4岁宝宝说话结巴怎么办 3岁幼儿说话结巴怎么办 三岁宝宝说话结巴怎么办 6岁宝宝说话结巴怎么办 经前下巴长痘怎么办 胃火导致的口臭怎么办 脸上有热毒痘痘怎么办 被丙肝患者针扎怎么办 大脑供血不足该怎么办 钛钉长在肉里了怎么办 鼻背筋膜松了怎么办 脑子里长了囊肿怎么办 婴儿声音哭沙哑了怎么办 脑膜瘤5cm了怎么办