Skip to content

力扣链接:117.填充每个节点的下一个右侧节点指针

难度:⭐⭐

解题关键词:二叉树层序遍历

解题思路:使用层序遍历,然后将每一层的元素单独拿出来,然后将前一个元素的 next 指针指向数组中的下一个元素,最后的元素指向 null 就可以了。

typescript
function connect(root: Node | null): Node | null {
  // 如果 root 为空,直接返回
  if (root === null) return null
  // 队列
  let queue: Node[] = [root]

  while (queue.length) {
    let size = queue.length

    // 将每一层的元素拿出来
    const curLayerNode: Node[] = queue.splice(0, size)

    // 将前一个元素的 next 指针指向数组中的下一个元素,最后的元素指向 null
    for (let i = 1; i <= size; i++) {
      const prev = curLayerNode[i - 1]
      const cur = curLayerNode[i]

      // 如果有左节点,加入栈
      if (prev.left) queue.push(prev.left)
      // 如果有右节点,加入栈
      if (prev.right) queue.push(prev.right)

      // 如果有后一个节点,那么前一个元素 next 指向它
      cur ? prev.next = cur : prev.next = null
    }
  }

  return root
};