❤ • 17天前
#include <bits/stdc++.h>
using namespace std;
struct TreeNode {
int val;
TreeNode *left;
TreeNode *right;
TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};
TreeNode *buildTree(const vector<int> &arr, int &id) {
if (id >= arr.size()) {
return nullptr;
}
int val = arr[id++];
if (val == -1) {
return nullptr;
}
TreeNode *node = new TreeNode(val);
node->left = buildTree(arr, id);
node->right = buildTree(arr, id);
return node;
}
vector<vector<int>> lvfind(TreeNode *root) {
vector<vector<int>> res;
if (root == nullptr) {
return res;
}
queue<TreeNode *> q;
q.push(root);
bool flag = 1;
while (!q.empty()) {
int levelSize = q.size();
vector<int> cur(levelSize);
for (int i = 0; i < levelSize; i++) {
TreeNode *node = q.front();
q.pop();
int index = flag ? i : (levelSize - 1 - i);
cur[index] = node->val;
if (node->left) {
q.push(node->left);
}
if (node->right) {
q.push(node->right);
}
}
res.push_back(cur);
flag = !flag;
}
return res;
}
void deleteTree(TreeNode *root) {
if (!root)
return;
deleteTree(root->left);
deleteTree(root->right);
delete root;
}
int main() {
vector<int> arr;
int num;
while (cin >> num) {
arr.push_back(num);
if (cin.get() == '\n') {
break;
}
}
int id = 0;
TreeNode *root = buildTree(arr, id);
vector<vector<int>> layers = lvfind(root);
for (const auto &layer : layers) {
for (size_t i = 0; i < layer.size(); i++) {
cout << layer[i];
if (i != layer.size() - 1) {
cout << " ";
}
}
cout << endl;
}
deleteTree(root);
return 0;
}
评论:
请先登录,才能进行评论