欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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;
    }
};