LeetCode 1104 二叉树寻路[数学 二叉树 位运算] HERODING的LeetCode之路
Posted HERODING23
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了LeetCode 1104 二叉树寻路[数学 二叉树 位运算] HERODING的LeetCode之路相关的知识,希望对你有一定的参考价值。
解题思路:
解决此题的关键在于观察,首先如果按照正常的排序得到的序列,与之字型序列相比,观察发现,需要查找偶数行某数的路径,其偶数深度路径不变,奇数路径为该行的反向;需要查找奇数行某数的路径,在其奇数深度路径不变,偶数路径为该行的反向。规律找出,直接开整。首先按照获取正常的序列,其次根据其深度的判断,对其不同的奇偶性行进行反向操作,代码如下:
class Solution {
public:
vector<int> pathInZigZagTree(int label) {
vector<int> res;
// 正常序列顺序
while(label) {
res.push_back(label);
label >>= 1;
}
// 反向
reverse(res.begin(), res.end());
int deep = res.size();
// 与深度奇偶性不同的取反
for(int i = 0; i < deep; i ++) {
if(deep % 2 != i % 2) continue;
int left = (1 << i);
// 取对称的数
res[i] = left * 3 - res[i] - 1;
}
return res;
}
};
以上是关于LeetCode 1104 二叉树寻路[数学 二叉树 位运算] HERODING的LeetCode之路的主要内容,如果未能解决你的问题,请参考以下文章
LeetCode 1104. 二叉树寻路/103. 二叉树的锯齿形层序遍历/ 171. Excel表列序号/ 987. 二叉树的垂序遍历