在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。
如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;
而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。
给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节点标号所组成的。
//用位运算做比较简单
class Solution {
public List pathInZigZagTree(int label) {
LinkedList ans = new LinkedList<>();
if (label == 0) return ans;
while (label != 1) {
ans.addFirst(label);
label >>= 1;
label = label ^ ((1 << (getBit(label) - 1)) - 1);
}
ans.addFirst(1);
return ans;
}
private int getBit(int num) {
int ans = 0;
while (num != 0) {
num >>= 1;
++ans;
}
return ans;
}
}