腾讯4月3号笔试:完全二叉排序树
记不清题目了。依稀记得题目中说高度为k的完全二叉排序树的节点个数是2^k -
1。但是,完全二叉树可以不是满的啊?还是说这里要求此题中二叉树就得是满的。
当时在这个问题上纠结了很久,现在感觉很不必要。
然后,做法就是二分了。你们的做法呢?
后来写了下,如下:
int solve(vector<int> &vec, vector<int> &nums, int left, int right) {
int index = (left+right)%2 == 0 ? (left+right)/2 : (left+right)/2+1;
int root = vec[index];
int res = 0;
if (nums[2] < root) res = solve(vec, nums, left, index-1);
else if (nums[0] > root) res = solve(vec, nums, index+1, right);
else return root;
return res;
}
int main()
{
int k, a, b, c; // 这里的k是k个节点了, 不是题目中的高度,反正思路是这样把。
while (cin >> k >> a >> b >> c) {
vector<int> vec(k, 0);
for (int i = 0; i < k; i++) {
vec[i] = i+1;
}
vector<int> nums{a, b, c};
sort(nums.begin(), nums.end());
cout << solve(vec, nums, 0, k-1) << endl;
}
return 0;
}
腾讯啊。#腾讯##C++工程师#