[算法]填充每个右侧节点指针 II

62 阅读1分钟

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 搜索即可~