LeetCode Populating Next Right Pointers in Each Node

本文介绍了一种在二叉树中为每个节点填充一个指向其右侧相邻节点的next指针的方法。通过广度优先遍历实现,将同一层级的节点连接起来。

LeetCode解题之Populating Next Right Pointers in Each Node


原题

为二叉树的节点都加入一个next指针,指向跟它在同一高度的右边的节点,假设右边没有节点,就指向None。

注意点:

  • 最好仅仅用常量的空间
  • 这是一棵全然二叉树

样例:

输入:

         1
       /  \
      2    3
     / \  / \
    4  5  6  7

输出:

         1 -> NULL
       /  \
      2 -> 3 -> NULL
     / \  / \
    4->5->6->7 -> NULL

解题思路

这里採用了思路最清晰的解法,可是用的空间不是常量的。能够看出事实上就是把树的每一层都串联起来了。要处理每一层的节点。能够使用广度优先遍历,把每一层的节点暂存在列表中。再把这些节点都连接起来。

AC源代码

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


class Solution(object):
    def connect(self, root):
        """
        :type root: TreeLinkNode
        :rtype: nothing
        """
        if not root:
            return
        current_level = [root]
        while current_level:
            next_level = []
            for node in current_level:
                if node.left:
                    next_level.append(node.left)
                if node.right:
                    next_level.append(node.right)
            for i in range(len(next_level) - 1):
                next_level[i].next = next_level[i + 1]
            current_level = next_level


if __name__ == "__main__":
    None

欢迎查看我的Github (https://github.com/gavinfish/LeetCode-Python) 来获得相关源代码。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值