• 2020年团体程序设计天梯赛 L2-3 完全二叉树的层序遍历


    思路:

    水题,略过

    Tip:

    满二叉树和完全二叉树的性质

    #include <bits/stdc++.h>
    
    using namespace std;
    typedef long long ll;
    const int maxn = 1000 + 5;
    
    struct point {
        int num;
        point *left;
        point *right;
    };
    int ceng[maxn];
    int a[maxn];
    int nowP = 1;
    int n;
    
    point *dfs(point *now, int nowCeng) {
        if (!ceng[nowCeng])
            return NULL;
        ceng[nowCeng]--;
        now = (point *) malloc(sizeof(point));
        now->left = NULL;
        now->right = NULL;
        now->left = dfs(now->left, nowCeng + 1);
        now->right = dfs(now->right, nowCeng + 1);
        now->num = a[nowP++];
        return now;
    }
    
    int main() {
        cin >> n;
        for (int i = 1; i <= n; i++)
            cin >> a[i];
        int i, j = 1, ans = 0;
        for (i = 1;; i *= 2, j++) {
            if (ans + i > n) {
                ceng[j] = n - ans;
                break;
            }
            ceng[j] = i;
            ans += i;
        }
        point *head;
        head = dfs(head, 1);
        queue<point *> que;
        que.push(head);
        vector<int> v;
        while (!que.empty()) {
            point *now = que.front();
            que.pop();
            v.push_back(now->num);
            if (now->left != NULL)
                que.push(now->left);
            if (now->right != NULL)
                que.push(now->right);
        }
        bool first = true;
        for (auto k:v) {
            if (first) {
                first = false;
                cout << k;
            } else
                cout << " " << k;
        }
        return 0;
    }
    

      

  • 相关阅读:
    动态规划_树形DP
    动态规划_区间DP
    Git
    动态规划_状态机与状态压缩DP
    Mybatis
    3.UIViewController详解
    Flutter boost实现原理简介
    FFmpeg笔记(四)
    Xcode-FFmpeg环境搭建
    FFmpeg(一)
  • 原文地址:https://www.cnblogs.com/Whiteying/p/14056504.html
Copyright © 2020-2023  润新知