leetcode 1104

less than 1 minute read

Published:

题目1104

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

如下图所示,在奇数行(即,第一行、第三行、第五行……)中,按从左到右的顺序进行标记;

而偶数行(即,第二行、第四行、第六行……)中,按从右到左的顺序进行标记。

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

输入样例

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

解析

所谓之字形树,就是把一个顺序的二叉树在奇数行将行内元素反转。这种反转实际上可以用一个变换函数来转为反转后元素,那只要正常输出元素,然后在奇数行内对元素执行一次变化即可。

题解

class Solution:
    def setrever(self,val,high):
        import math
        end=math.pow(2,high)
        start=end//2
        return int(end-val+start-1)

    def pathInZigZagTree(self, label: int) -> List[int]:
        import math
        level=int(math.log2(label))+1
        trueval=label
        if level%2==0:
            trueval=self.setrever(label,level)
        result=[label]
        while level>1:
            level-=1
            trueval=int(trueval//2)
            if level%2==0:
                result=[self.setrever(trueval,level)]+result
            else:
                result=[trueval]+result
        return result