AC

 •  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;
}


评论:

请先登录,才能进行评论