AC

 •  1个月前


#include <bits/stdc++.h>
using namespace std;
vector<int> arr;

struct TreeNode {
	int val;
	TreeNode *left, *right;
	TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}
};

TreeNode *buildTree(const vector<int> &arr, int id) {
	if (id >= arr.size())
		return nullptr;
	TreeNode *root = new TreeNode(arr[id]);
	root->left = buildTree(arr, id * 2);
	root->right = buildTree(arr, id * 2 + 1);
	return root;
}

void lvfind(TreeNode *root, int h, int &minn, int &maxval) {
	if (!root)
		return;
	queue<TreeNode *> q;
	q.push(root);
	while (!q.empty()) {
		size_t lvsize = q.size();
		int sum = 0;
		for (size_t i = 0; i < lvsize; ++i) {
			TreeNode *cur = q.front();
			sum += cur->val;
			if (cur->left)
				q.push(cur->left);
			if (cur->right)
				q.push(cur->right);
			q.pop();
		}
		if (sum > maxval) {
			maxval = sum;
			minn = h;
		}
		h++;
	}
}

int main() {
	int n;
	cin >> n;
	arr.resize(n + 1);
	for (int i = 1; i <= n; ++i) {
		cin >> arr[i];
	}
	TreeNode *root = buildTree(arr, 1);
	int h = 1, maxval = INT_MIN, minn = 1;
	lvfind(root, h, minn, maxval);
	cout << minn << endl;
	return 0;
}


评论:

请先登录,才能进行评论