层序遍历建立树
https://www.kamacoder.com/problempage.php?pid=1051
#include <bits/stdc++.h>
using namespace std;
int k, n;
struct node {
int val;
node* left;
node* right;
node(int val) : val(val), left(nullptr), right(nullptr){}
// static void* operator new(size_t n) {
// k = (node*)malloc(sizeof(node)*n);
// }
// ~node() {
// delete k;
// }
// static node* k;
};
//node* node::k = nullptr;
node* CreatTree(vector<int>& ve) {
queue<node*> qu;
node* root = new node(ve[0]);
int i = 1;
qu.push(root);
while (!qu.empty() && i < ve.size()) {
node* top = qu.front();
qu.pop();
if (top->val == -1) {
continue;
}
if (i < ve.size()) {
node* left = new node(ve[i++]);
top->left = left;
qu.push(left);
}
if (i < ve.size()) {
node* right = new node(ve[i++]);
top->right = right;
qu.push(right);
}
}
return root;
}
void Move_k(vector<node*>& vec, int k)
{
vector<node*> temp(vec.begin(), vec.end());
for(int i = 0;i < vec.size();i++)
vec[(i+k) % (vec.size())] = temp[i];
}
int main () {
cin >> k >> n;
vector<int> ve(n);
for(int i = 0; i < n; i++) {
cin >> ve[i];
}
node* root = CreatTree(ve);
queue<node*> qu;
qu.push(root);
while (!qu.empty()) {
int size = qu.size();
vector<node*> vec(size);
for (int i = 0; i < size; i++) {
vec[i] = qu.front();
qu.pop();
}
Move_k(vec, k);
for(int i = 0;i < size;i++)
{
cout << vec[i]->val << " ";
if(vec[i]->left)
qu.push(vec[i]->left);
if(vec[i]->right)
qu.push(vec[i]->right);
}
}
return 0;
}

浙公网安备 33010602011771号