//在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。
//
// 如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;
//
// 而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。
//
//
//
// 给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节点标号所组成的。
//
//
//
// 示例 1:
//
// 输入:label = 14
//输出:[1,3,4,14]
//
//
// 示例 2:
//
// 输入:label = 26
//输出:[1,2,6,10,26]
//
//
//
//
// 提示:
//
//
// 1 <= label <= 10^6
//
// Related Topics 树 数学
// 👍 59 👎 0
import java.util.List;
//leetcode submit region begin(Prohibit modification and deletion)
class Solution {
public List<Integer> pathInZigZagTree(int label) {
//思路:找对称点/2
int n = label;
int i = 0;
while (n != 0) {
n = n >> 1;
i++;
}
List<Integer> integers = new ArrayList<>();
findParent(label, i, integers);
return integers;
}
private void findParent(int label, int i, List<Integer> integers) {
int max = (1 << i) - 1;
int min = 1 << (i - 1);
int parent = (min + max - label) / 2;
if (i != 1) {
findParent(parent, i - 1, integers);
}
integers.add(label);
}
}
//leetcode submit region end(Prohibit modification and deletion)
【算法题】【★★】二叉树寻路
最新推荐文章于 2023-09-27 08:45:11 发布