已知每个节点的子节点数,bfs遍历即可。
class Solution { typedef long long ll; public: /** * 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可 * * @param k int整型 表示完全k叉树的叉数k * @param a int整型vector 表示这棵完全k叉树的Bfs遍历序列的结点编号 * @return long长整型 */ ll sum = 0; void bfs(vector<int> &a, int k) { queue<ll> q; q.push(a[0]); int s = 1; while(!q.empty()) { ll ss = q.front(); q.pop(); if(a.size() - k > s) { for(int i = s; i <= s + k - 1; i++) { sum += ss^a[i]; q.push(a[i]); } s += k; } else { for(int i = s; i < a.size(); i++) sum += ss^a[i]; break; } } } long long tree2(int k, vector<int>& a) { bfs(a, k); return sum; } };