LeetCode 1104. 二叉树寻路(满二叉树的编号+位运算)
程序员文章站
2022-05-20 20:25:30
...
二叉树寻路
本题是将一棵满二叉树的偶数层的节点的序号进行一下反转。
① 先判断label
的层数,如果是奇数层,不动;如果是偶数层,那就对应到相应的编号。
② 根据满二叉树编号的性质,将路径上的点保存起来。
③ 将偶数层的节点进行变换。
class Solution {
public:
vector<int> pathInZigZagTree(int label) {
vector<int> ans;
int idx = 1;
while( (1<<idx)-1 <label ){
idx++;
}
if(!(idx&1)){
label = (1<<idx-1)+(1<<idx)-1 - label;
}
while(label){
ans.push_back(label);
label >>= 1;
}
reverse(ans.begin(),ans.end());
for(int i=0;i<ans.size();i++){
if(i&1){
int t = (1<<i)+(1<<(i+1))-1;
ans[i] = t - ans[i];
}
}
return ans;
}
};