题目
系统中有一棵 个点的完全二叉树,现给出它的 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; } };