题目出处: https://leetcode-cn.com/problems/path-in-zigzag-labelled-binary-tree/
思路:利用满二叉树的性质求解。满二叉数的结构是镜像对称结构。每求出一个父节点,均需要通过【同一层对称节点和相同的性质】求出其对称节点,将该对称节点作为新的节点。而同一层的对称节点的和与该层的深度有关,故首先应该求出label所在层的深度。
class Solution {
public:
int getDepth(int label){
int depth = 0;
while(label){
label >>= 1;
++depth;
}
return depth;
}
vector<int> pathInZigZagTree(int label) {
int depth = getDepth(label); //得到label所在的深度
vector<int> ans;
for(int i = depth-1; i >= 0; --i){
ans.push_back(label);
label = pow(2, i-1) + pow(2, i)-1 - label / 2;
}
reverse(ans.begin(), ans.end());
return ans;
}
};