1104. 二叉树寻路


1104. 二叉树寻路

题目描述

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

解题思路

因为以1为根节点层次编号的满二叉树可以对应到位的表示,所以用位运算的思路即可。

因为每层的顺序在变,所以每次需要对首位外的其它位取反。

举例14=1110b,

先将14右移,变为111b,然后对除第一位外所有位取反变为100b,即它的根节点4,

同理100b,右移变为10b,对除第一位外所有位取反变为11b,即它的根节点3

一直到1结束。

代码实现

class Solution:
    def pathInZigZagTree(self, label: int) -> List[int]:
        res = []
        while label != 1:
            res.append(label)
            label >>= 1
            # 异或实现
            label = label ^(1 << (label.bit_length() - 1)) - 1
        return [1]+res[::-1]

参考

python,位运算

作者:yybeta
链接:https://leetcode-cn.com/problems/path-in-zigzag-labelled-binary-tree/solution/pythonwei-yun-suan-by-mai-mai-mai-mai-zi/
来源:力扣(LeetCode)
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值