用队列来实现BFS遍历每一个结点的子结点,推出k叉树第t个结点的子结点的公式为:kt-k+2到kt+1;
最后如果查询到第n个点直接return;
class Solution {
public:
/**
* 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
*
* @param k int整型 表示完全k叉树的叉数k
* @param a int整型vector 表示这棵完全k叉树的Bfs遍历序列的结点编号
* @return long长整型
*/
#define ll long long
long long tree2(int k, vector<int>& a) {
// write code here
ll sum=0;
queue<ll>q;
q.push(1);
while(q.size())
{
ll t=q.front();
q.pop();
for(int i=t*k-k+2;i<=k*t+1&&i<=a.size();i++)
{
ll ans=a[i-1]^a[t-1];
sum+=ans;
q.push(i);
}
}
return sum;
}
};
京公网安备 11010502036488号