第一题:类似折半查找顺序表中每个元素的成功查找次数总和,先找到节点数≤n的最大的满二叉树,高度为floor(log2(n)),然后最后一层的节点数为n-满二叉树的节点数。构造二分查找树,然后求每个节点查找成功的查找次数,相加。 #include <bits/stdc++.h> using namespace std; typedef long long ll; int main(){   ll n, res = 0;   cin>>n;   ll height = floor(log2(n));   ll leaves = n - ll(pow(2, height) - 1);   for(int i = 1; i <= height; ++i){     res += ll(pow(2, i - 1)) * i;   }   res += leaves * (height + 1);   cout<<res<<endl;   return 0; } 第二题:B - Zero Tree原题。