填充结点的下一个右侧结点-python

leetcode的一道中等题(但是难度并不高)

题目链接:116. 填充每个节点的下一个右侧节点指针 - 力扣(Leetcode)

“右侧结点”,其实就是同深度下的右边的那个结点,

题目给的是完美二叉树,且一开始已经够将所有结点的next设置为NULL了 

 

 

 思路:

每次入队都是(深度,结点),每次取出后在队列中找深度一样的结点 找到的第一个(子结点入队顺序记得设置为左边先进队)就是其下一个右侧结点,然后马上结束寻找结点的这个循环 记住:要求返回Node类型 所以为空时不能直接返回[]会报类型错误


"""
# Definition for a Node.
class Node:
    def __init__(self, val: int = 0, left: 'Node' = None, right: 'Node' = None, next: 'Node' = None):
        self.val = val
        self.left = left
        self.right = right
        self.next = next
"""

class Solution:
    def connect(self, root: 'Optional[Node]') -> 'Optional[Node]':
        if not root:return root
        queue = collections.deque()
        depth = 1
        queue.append((depth, root))
        

        while queue:
            depth, node = queue.popleft()
            if  not deque: node.next = NULL
            else:
                for depth_judge, node_judge in queue:
                    if depth_judge == depth:
                        node.next = node_judge
                        break

            if node.left and node.right:
                queue.append((depth+1, node.left))
                queue.append((depth+1, node.right))
        return root
            

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值