LeetCode——1104. 二叉树寻路[Path In Zigzag Labelled Binary Tree][中等]——分析及代码[Java]

  • 一、题目
  • 二、分析及代码
    • 1. 按位置求解
      • (1)思路
      • (2)代码
      • (3)结果
  • 三、其他

一、题目

在一棵无限的二叉树上,每个节点都有两个子节点,树中的节点 逐行 依次按 “之” 字形进行标记。

  • 在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;
  • 而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。

给你树上某一个节点的标号 label,请你返回从根节点到该标号为 label 节点的路径,该路径是由途经的节点标号所组成的。

示例 1:

输入:label = 14
输出:[1,3,4,14]

示例 2:

输入:label = 26
输出:[1,2,6,10,26]

提示:

  • 1 <= label <= 10^6

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/path-in-zigzag-labelled-binary-tree
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

二、分析及代码

1. 按位置求解

(1)思路

若所给二叉树的每一行都从左向右进行标记,则对节点 label,其父节点为 label / 2。

因此,可将二叉树先转换为全部从左向右标记的树,再根据各层节点的位置依次求解。

对奇数行的节点,转换前后标记相同;对偶数行第 row 行的节点 label,题中二叉树对应位置标记为 2^(row - 1) + 2^row - label - 1。

(2)代码

class Solution {public List<Integer> pathInZigZagTree(int label) {int row = 1;//行数while ((1 << row) <= label)//获得初始label对应的行数row++;if ((row & 1) == 0)//初始label位于偶数行,转换为从左到右标记时对应位置的值label = (1 << (row - 1)) + (1 << row) - label - 1;List<Integer> ans = new ArrayList<Integer>();for (; row > 0; row--) {//倒序求输出答案if ((row & 1) == 1)//奇数行,直接输出位置对应的标记ans.add(label);else//偶数行,按位置转换为从右到左的标记ans.add((1 << (row - 1)) + (1 << row) - label - 1);label >>= 1;//转为label的父节点}Collections.reverse(ans);//反转得到的路径return ans;//输出路径}
}

(3)结果

执行用时 :0 ms,在所有 Java 提交中击败了 100.00% 的用户;
内存消耗 :36.1 MB,在所有 Java 提交中击败了 50.22% 的用户。

三、其他

暂无。

LeetCode——1104. 二叉树寻路(Path In Zigzag Labelled Binary Tree)[中等]——分析及代码(Java)相关推荐

  1. [Swift]LeetCode1104. 二叉树寻路 | Path In Zigzag Labelled Binary Tree

    ★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★★ ➤微信公众号:山青咏芝(shanqingyongzhi) ➤博客园地址:山青咏芝(https://www.cnblog ...

  2. LeetCode每日一题(Path In Zigzag Labelled Binary Tree)

    In an infinite binary tree where every node has two children, the nodes are labelled in row order. I ...

  3. LeetCode 1104. Path In Zigzag Labelled Binary Tree解题报告

    1104. Path In Zigzag Labelled Binary Tree Path In Zigzag Labelled Binary Tree python solution 题目描述 I ...

  4. 1104. Path In Zigzag Labelled Binary Tree**

    1104. Path In Zigzag Labelled Binary Tree** https://leetcode.com/problems/path-in-zigzag-labelled-bi ...

  5. LeetCode-1104. Path In Zigzag Labelled Binary Tree

    LeetCode-1104. Path In Zigzag Labelled Binary Tree 题目描述:https://leetcode.com/problems/path-in-zigzag ...

  6. 【leetcode】1104. Path In Zigzag Labelled Binary Tree

    题目如下: In an infinite binary tree where every node has two children, the nodes are labelled in row or ...

  7. 1104 Path In Zigzag Labelled Binary Tree

    1 题目 In an infinite binary tree where every node has two children, the nodes are labelled in row ord ...

  8. Path In Zigzag Labelled Binary Tree(C++二叉树寻路)

    解题思路: (1)从下往上,除2,注意左右顺序 class Solution { private:vector<int> v; public:void parent(int label) ...

  9. leetcode1104. Path In Zigzag Labelled Binary Tree

    题目链接 这个题很容易首先联想到完全二叉树的性质,父结点下标i,如果有左儿子,左儿子下标2i,如果有右儿子,右儿子下标2i+1,相应的一个结点的父结点就是i/2下取整.但是因为这个题在偶数行是从右到左 ...

最新文章

  1. ICRA2019 | 用于移动设备的双目立体匹配
  2. 学习编程可以参考哪些网站?
  3. bugku ctf 域名解析
  4. 易语言 设置屏幕刷新率 源码_一块好的手机屏幕应具备什么条件?现在了解还不晚...
  5. Electron怎样进行渲染进程调试和使用浏览器和VSCode进行调试
  6. workaround for COM_ATTRFRG_GEN 066
  7. 【1】推荐系统评测指标
  8. “女神节”男性送礼热门商品榜:“求生欲”极强!
  9. Linux Shell 读取用户输入
  10. stm32 vscode 编译_STM32开发之 VSCode+gcc环境编译
  11. 应用虑镜特效时遇到浏览器权限问题
  12. 11 、图解2个node环境下replica shard是如何分配的
  13. android studio for android learning (九) android之Adapter用法
  14. eclipse给jar包打断点
  15. 驱动程序解析及其对硬件和系统发挥效能的重大作用和注意事宜
  16. 安装Ubuntu Linux系统时硬盘分区
  17. python层次分析法案例_在R语言中使用层次分析法-案例1
  18. 二十一、JVM可视化监控工具
  19. 「HNOI2004」 宠物收养所 - 平衡树Splay
  20. 15、PIC32系列-输入捕捉ICAP

热门文章

  1. 多线程|pi1.c 使用2个线程根据莱布尼兹级数计算PI
  2. 音频基础知识 - PCM 浅析
  3. 世界第五大外包公司(CGI group inc)能够做出来多烂的网站,通过系分的课程设计我对于人机交互和团队合作的几个总结
  4. 源火星球——青龙 详细教程
  5. 网站后台主流架构设计参考(图文)
  6. 深大自考计算机科学与技术资料,想自考深圳大学的计算机科学与技术专业,难吗?...
  7. 在10亿个数中找出前1000个最大的
  8. 关于SSD寿命问题的探讨
  9. 如何构建智能车联网主动防御体系
  10. 流氓软件卸载-MrWReSadse、Nexuser.exe、WRSvcmbdl.dll