腾讯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++工程师#