题目
系统中有一棵 个点的完全二叉树,现给出它的 BFS 层序遍历序列
,请还原这棵树,并返回加密后的答案。
答案加密方法:所有边两个端点异或的和,即 ,其中
为一条树上的边。
解题思路
将完全二叉树按照层次遍历的顺序从 1 开始编号,则节点 的左孩子节点为
,右孩子节点为
,所以
和
是树上的边,计算每条边的两个端点的异或值,累加后返回答案。
C++代码
class Solution {
public:
/**
*
* @param a int整型vector 表示这棵完全二叉树的Bfs遍历序列的结点编号
* @return long长整型
*/
long long tree1(vector<int>& a) {
// write code here
int n = a.size();
long long ans = 0;
for(int i=1; i<=n; ++i){
int left = i<<1;
int right = left + 1;
if(left <= n){
ans += a[i-1] ^ a[left-1];
}
if(right <= n){
ans += a[i-1] ^ a[right-1];
}
}
return ans;
}
}; 
京公网安备 11010502036488号