117. 填充每个节点的下一个右侧节点指针 II

117. 填充每个节点的下一个右侧节点指针 II

  • 题目-中等难度
  • 示例
  • 1. bfs

题目-中等难度

给定一个二叉树:

struct Node {
int val;
Node *left;
Node *right;
Node *next;
}

填充它的每个 next 指针,让这个指针指向其下一个右侧节点。如果找不到下一个右侧节点,则将 next 指针设置为 NULL 。

初始状态下,所有 next 指针都被设置为 NULL 。

示例

示例 1:
117. 填充每个节点的下一个右侧节点指针 II_第1张图片

输入:root = [1,2,3,4,5,null,7]
输出:[1,#,2,3,#,4,5,7,#]
解释:给定二叉树如图 A 所示,你的函数应该填充它的每个 next 指针,以指向其下一个右侧节点,如图 B 所示。序列化输出按层序遍历顺序(由 next 指针连接),‘#’ 表示每层的末尾。

示例 2:

输入:root = []
输出:[]

提示:

  • 树中的节点数在范围 [0, 6000] 内
  • -100 <= Node.val <= 100

进阶:

你只能使用常量级额外空间。
使用递归解题也符合要求,本题中递归程序的隐式栈空间不计入额外空间复杂度。

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/summary-ranges
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

1. bfs

时间
64ms
击败 31.90%使用 Python3 的用户
内存
16.93MB
击败 85.37%使用 Python3 的用户

"""
# 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: 'Node') -> 'Node':
        # 放入根节点到列表
        li = [root]
        # 列表只要有节点存在就遍历
        while li:
            # 定义空节点
            pre = None
            # 每次去除所有li中节点, 再添加子节点
            for _ in range(len(li)):
                # 过去当前节点
                a = li.pop(0)
                # 如果pre不为空,说明不是最左侧节点, 开始连接next
                if pre:
                    pre.next = a
                # pre定义为当前节点,方便下一个节点的连接
                pre = a
                # 如果当前节点不为空, 并且有左子节点, 将子节点添加到li
                if a and a.left:
                    li.append(a.left)
                # 如果当前节点不为空, 并且有右子节点, 将子节点添加到li
                if a and a.right:
                    li.append(a.right)
        return root

你可能感兴趣的:(算法,二叉树,python,算法,二叉树,树,leetcode)