0x00 题目

给定一个二叉树,找出其​​最小深度​​。

​最小深度​​​是从​​根节点​​​到​​最近​​叶子节点的最短路径上的节点数量。

说明:叶子节点是指没有子节点的节点。


0x01 思路

通过二叉树的​​层序遍历​​​方式,从当前节点,依次向下寻找。
每往下一层,同时记录​​​深度​​​。
当存在一个节点,左右子树都​​​为空​​​时,则找到了​​最近​​的叶子节点。


0x02 解法

语言:​​Swift​

树节点:​​TreeNode​

public class TreeNode {
public var val: Int
public var left: TreeNode?
public var right: TreeNode?
public init() { self.val = 0; self.left = nil; self.right = nil; }
public init(_ val: Int) { self.val = val; self.left = nil; self.right = nil; }
public init(_ val: Int, _ left: TreeNode?, _ right: TreeNode?) {
self.val = val
self.left = left
self.right = right
}
}

代码:

func minDepth(_ root: TreeNode?) -> Int {
guard let root = root else { return 0 }

// 深度
var depth = 1
// 存储同一层的所有节点
var queue: [TreeNode] = []
// 根节点
queue.append(root)

while !queue.isEmpty {
var tmp: [TreeNode] = []

for node in queue {
// 找到叶子节点
if node.left == nil && node.right == nil {
return depth
}
if let left = node.left {
tmp.append(left)
}
if let right = node.right {
tmp.append(right)
}
}

queue = tmp
depth += 1
}

return depth
}