golang leetcode 1103. 二叉树寻路

思路: 通过当前label计算父节点

题目限制 1 <= label <= 10^6
完全二叉树每一层的节点和节点开始数字为:
1
2
4
8
16
32
...
所以每一层的数为 []int{1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576}

  1. 提前计算每一层的数量。
  2. 遍历找到当前lablel所在的层。当前层最后一个节点为 last - 1。因为这个二叉树是蛇形走位。所以 上层节点所在对应层的偏移是 (last - 1 - label)/2
  3. 计算上一层的起始位置为last/4。
  4. 上一层label即为 (last - 1 - label)/2 + last/4。
  5. 递归知道label = 1
var start = []int{1, 2, 4, 8, 16, 32, 64, 128, 256, 512, 1024, 2048, 4096, 8192, 16384, 32768, 65536, 131072, 262144, 524288, 1048576}

func pathInZigZagTree(label int) []int {
    if label == 1 {
        return []int{1}
    }
    last := 0
    for i := 0; i < len(start); i++ {
        if label < start[i] {
            last = start[i]
            break
        }
    }
    idx := (last - label - 1) / 2
    return append(pathInZigZagTree(last/4+idx), label)
}
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 树的定义与基本术语   树型结构是一类重要的非线性数据结构,其中以树和二叉树最为常用,是以分支关系定义的层次结构。...
    java技术分享师阅读 1,132评论 0 1
  • 本文主要作为自己的学习笔记,并不具备过多的指导意义。 目录 基本概念 二叉树的重点 二叉树的遍历 实现先序遍历 实...
    kirito_song阅读 1,383评论 0 5
  • 1. 树的概念 一个树由节点组成,这些节点包含根节点,父节点,子节点,兄弟节点;没有任何一个节点的树称为空树;如果...
    HChase阅读 6,397评论 0 34
  • 树的基本概念 节点,根节点,父节点,子节点,兄弟节点都是属于树的范涛; 一棵树可以没有任何节点,称为空树; 一棵树...
    coder_feng阅读 1,129评论 0 0
  • 2019 iOS面试题大全---全方面剖析面试2018 iOS面试题---算法相关1、七种常见的数组排序算法整理(...
    Theendisthebegi阅读 10,412评论 0 17