117. Populating Next Right Pointers in Each Node II Leetcode Python

本文介绍了一种在二叉树中填充每个节点的next指针的方法,使得同一层级的相邻节点能够通过next指针相连。文章提供了两种解决方案:一种使用额外空间进行层序遍历,另一种则采用常数额外空间实现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Follow up for problem "Populating Next Right Pointers in Each Node".


What if the given tree could be any binary tree? Would your previous solution still work?


Note:


You may only use constant extra space.
For example,
Given the following binary tree,
         1
       /  \
      2    3
     / \    \
    4   5    7
After calling your function, the tree should look like:
         1 -> NULL
       /  \
      2 -> 3 -> NULL
     / \    \

    4-> 5 -> 7 -> NULL

这题和原来题目的区别在于这里的tree有肯能不是full tree.或者有残缺。 所以最好的方法是level order travesral然后把每层的node从左边指向右边。

这里用了个额外的存储。所以空间复杂度为O(N)

一共需要遍历两遍第一遍是存储,第二遍是指针。所以时间复杂度为O(N)

code is as follow

# Definition for a  binary tree node
# class TreeNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#         self.next = None

class Solution:
    # @param root, a tree node
    # @return nothing
    def solve(self,solution,level,root):
        if len(solution)<level+1:
            solution.append([])
        solution[level].append(root)
        if root.left:
            self.solve(solution,level+1,root.left)
        if root.right:
            self.solve(solution,level+1,root.right)
    def connect(self, root):
        if root==None:
            return root
        solution=[]
        level=0
        self.solve(solution,level,root)
        for level in range(len(solution)):
            for count in range(1,len(solution[level])):
                solution[level][count-1].next=solution[level][count]
            solution[level][-1].next=None
        return root

        
        

another method need O(n) time and O(1) space

# Definition for binary tree with next pointer.
# class TreeLinkNode:
#     def __init__(self, x):
#         self.val = x
#         self.left = None
#         self.right = None
#         self.next = None

class Solution:
    # @param root, a tree link node
    # @return nothing
    def connect(self, root):
        cur=root
        while cur:
            pre=None
            firstnode=None
            while cur:
                if firstnode==None:
                    firstnode= cur.left if cur.left else cur.right
                if cur.left:
                    if pre:
                        pre.next=cur.left
                    pre=cur.left
                if cur.right:
                    if pre:
                        pre.next=cur.right
                    pre=cur.right
                cur=cur.next
            cur=firstnode



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值