难度:中等。
标签:二叉树,数学。
从label向上找parent。
正确解法:
class Solution {
int getParent(int label, int row){
int row_begin = pow(2, row);
int row_end = row_begin * 2 - 1;
int now_index = row_end - label;
if(row % 2 == 0){ // ou
now_index = label - row_begin;
}
int parent_index = now_index / 2;
int parent = row_begin / 2 + parent_index;
if(row % 2 == 0){ // parent ji
parent = row_begin - 1 - parent_index;
}
return parent;
}
public:
vector<int> pathInZigZagTree(int label) {
int row = log(label) / log(2);
vector<int> ans(row + 1);
ans[row] = label;
while(label != 1){
label = getParent(label, row);
row--;
ans[row] = label;
}
return ans;
}
};
结果: