0x00 题目
给定一个二叉树,填充它的每个 next 指针
让这个指针指向其 下一个 右侧 节点
如果找不到下一个右侧节点
则将 next 指针设置为 NULL
初始状态下,所有 next 指针都被设置为 NULL
0x01 思路
本题跟 填充节点的右侧节点 有些类似
区别是:本题的节点,不保证都有 2 个子节点
想要把同一层的节点 从左往右 连接起来
相当于是要先获取 同一层 的所有节点
然后再做 连接 操作
因此,适合使用 层序 遍历法
0x02 解法
语言:Swift
树节点:TreeNode
public class Node {
public var val: Int
public var left: Node?
public var right: Node?
public var next: Node?
public init(_ val: Int) {
self.val = val
self.left = nil
self.right = nil
self.next = nil
}
}
解法:
func connect(_ root: Node?) -> Node? {
guard let root = root else {
return nil
}
var queue = [Node]()
queue.append(root)
while !queue.isEmpty {
var temp = [Node]()
var index = 0
// 连接操作
while index < queue.count - 1 {
let node = queue[index]
node.next = queue[index+1]
index += 1
}
// 获取下一层的所有节点
for node in queue {
if node.left != nil {
temp.append(node.left!)
}
if node.right != nil {
temp.append(node.right!)
}
}
queue = temp
}
return root
}
0x03 我的小作品
欢迎体验我的作品之一:小五笔 86 版
五笔学习好帮手!
App Store 搜索即可~