数学1104. 二叉树寻路(中等)

Posted 煮雪烧茶的刷题日记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数学1104. 二叉树寻路(中等)相关的知识,希望对你有一定的参考价值。

让我们先来看看这道题目的描述

因为题目给出的是完全二叉树,所以我们可以用数学技巧来实现,当偶数行时,label是从右向左排列的,而当奇数行时,label是从左向右排列的。

如果不考虑奇偶性,都按照从左到右的顺序,一个节点的两个子节点的值分别为val * 2 , val * 2 + 1,有比较强的规律

所以我们将偶数行的值先按照正常顺序排列,再计算得到真正的值

一个偶数行的数值真正的情况应该为 2 ^ 行数 - 1 + 2 ^ 行数 - 1  - val

 private int reverse(int val, int depth){ return (1 << depth - 1) + (1 << depth) - 1 - val; }




class Solution{ public List<Integer> pathInZigZagTree(int label) { List<Integer> ans = new ArrayList<>(); int depth = findDepth(label);                 if (depth % 2 == 0) { label = reverse(label, depth); }          while(depth > 0){ if(depth % 2 != 0){ ans.add(label); }else{ ans.add(reverse(label, depth)); } depth--; label >>= 1; } Collections.reverse(ans); return ans;
} private int findDepth(int val){ int depth = 0; while(val >= 1){ val >>= 1; depth++; } return depth; } private int reverse(int val, int depth){ return (1 << depth - 1) + (1 << depth) - 1 - val; }}

如果计算出的总行数为偶数,需要先对这个label值进行操作,否则会发生错误。也可以把这一行单独拿出来讨论~

以上是关于数学1104. 二叉树寻路(中等)的主要内容,如果未能解决你的问题,请参考以下文章

[M二叉树] lc1104. 二叉树寻路(思维+找规律+数学)

LeetCode 1104 二叉树寻路[数学 二叉树 位运算] HERODING的LeetCode之路

1104. 二叉树寻路

1104. 二叉树寻路

LeetCode 1104. 二叉树寻路/103. 二叉树的锯齿形层序遍历/ 171. Excel表列序号/ 987. 二叉树的垂序遍历

满二叉树的性质题--二叉树寻路