首页 > 其他 > 详细

Zlrrr

时间:2019-03-29 21:08:35      阅读:113      评论:0      收藏:0      [点我收藏+]
#include <bits/stdc++.h>
using namespace std;

const int maxn = 1e5 + 10;
int N, root = 1;
int vis[maxn], dep[maxn];
vector<int> pre;
vector<int> lev[maxn];
int depth = -1;

struct Node{
    int val;
    int l;
    int r;
}node[maxn];

void order(int root) {
    if(!root) return;

    if(node[root].l != -1) order(node[root].l);
    if(node[root].r != -1) order(node[root].r);
    pre.push_back(node[root].val);
}

void levelorder(int root) {
    if(!root) return;
    queue<int> q;
    q.push(root);
    dep[root] = 1;
    while(!q.empty()) {
        int t = q.front();
        q.pop();

        lev[dep[t]].push_back(node[t].val);
        if(node[t].l != -1) q.push(node[t].l), dep[node[t].l] = dep[t] + 1, depth = max(depth, dep[node[t].l]);
        if(node[t].r != -1) q.push(node[t].r), dep[node[t].r] = dep[t] + 1, depth = max(depth, dep[node[t].r]);
    }
}

int main() {
    scanf("%d", &N);
    memset(vis, 0, sizeof(vis));
    memset(dep, 0, sizeof(dep));
    for(int i = 1; i <= N; i ++) {
        scanf("%d%d%d", &node[i].val, &node[i].l, &node[i].r);
        if(node[i].l != -1) vis[node[i].l] = 1;
        if(node[i].r != -1) vis[node[i].r] = 1;
    }

    while(vis[root]) root ++;

    levelorder(root);
    //printf("%d\n", depth);

    for(int i = 1; i <= depth; i ++) {
        if(i % 2 == 0) {
            for(int j = lev[i].size() - 1; j >= 0; j --)
                printf("%d ", lev[i][j]);
        } else {
            for(int j = 0; j < lev[i].size(); j ++)
                printf("%d ", lev[i][j]);
        }
        //printf("%d\n", lev[i].size());
    }
    //for(int i = 0; i < lev.size(); i ++)
        //printf("%d%s", lev[i], i != lev.size() - 1 ? " " : "\n");

    return 0;
}

  

Zlrrr

原文:https://www.cnblogs.com/zlrrrr/p/10623778.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!