吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1311|回复: 1
收起左侧

[其他原创] PAT-1127 ZigZagging on a Tree

[复制链接]
AXV 发表于 2020-3-20 17:17
发个题解,记录下做题的过程
这道题层序遍历,每层换下顺序就可
[C++] 纯文本查看 复制代码
#include <algorithm>
#include <cstdio>
#include <iostream>
#include <queue>

using namespace std;
int n;
int in[60];
int post[60];
vector<int> levs[100];

void tran(int head, int tail, int level)
{
    if (head == tail) {
        levs[level].push_back(in[head]);
        return;
    }

    int rid = -1;

    for (int i = 0; i < n; i++) {
        int pnum = post[i];
        for (int j = head; j <= tail; j++) {
            if (pnum == in[j]) {
                rid = j;
                break;
            }
        }
        if (rid != -1) {
            break;
        }
    }

    if (rid > head) {
        tran(head, rid - 1, level + 1);
    }
    levs[level].push_back(in[rid]);
    if (rid < tail) {
        tran(rid + 1, tail, level + 1);
    }
}

int main(void)
{
    scanf("%d", &n);
    for (int i = 0; i < n; i++) {
        scanf("%d", in + i);
    }
    for (int i = 0; i < n; i++) {
        scanf("%d", post + i);
    }

    reverse(post, post + n);

    tran(0, n - 1, 0);
    printf("%d", levs[0][0]);
    bool ltr = true;
    for (int i = 1; i < n; i++) {
        if (ltr) {
            for (int j = 0; j < levs[i].size(); j++) {
                printf(" %d", levs[i][j]);
            }
            ltr = false;
        } else {
            for (int j = levs[i].size() - 1; j >= 0; j--) {
                printf(" %d", levs[i][j]);
            }
            ltr = true;
        }
    }
}

免费评分

参与人数 1吾爱币 +5 热心值 +1 收起 理由
苏紫方璇 + 5 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

vethenc 发表于 2020-3-20 17:56
加油!努力刷题,定有所得。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-17 02:47

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表