111. 二叉树的最小深度
作者:方勇(gopher)
- 2022 年 3 月 27 日
本文字数:895 字
阅读完需:约 3 分钟
难度简单 703 收藏分享切换为英文接收动态反馈
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:2
复制代码
示例 2:
输入:root = [2,null,3,null,4,null,5,null,6]
输出:5
复制代码
提示:
树中节点数的范围在
[0, 105]
内-1000 <= Node.val <= 1000
题解:
BFS
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func minDepth(root *TreeNode) int {
var queue []*TreeNode
var minDepth func(*TreeNode) int
push := func(node *TreeNode) {
queue = append(queue, node)
}
pop := func() *TreeNode {
tmp := queue[0]
queue = queue[1:]
return tmp
}
minDepth = func(root *TreeNode) int {
if root == nil {
return 0
}
queue = append(queue, root)
depth := 1
for len(queue) > 0 {
sz := len(queue)
for i := 0; i < sz; i++ {
node := pop()
if node.Left == nil && node.Right == nil { // 当左节点和右节点都是null的时候返回
return depth
}
if node.Left != nil {
push(node.Left)
}
if node.Right != nil {
push(node.Right)
}
}
depth++ // 每层结束会+1
}
return depth
}
return minDepth(root)
}
复制代码
DFS
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func minDepth(root *TreeNode) int {
res := 0
if root == nil {
return res
}
searchPath(root, 0, &res)
return res
}
func searchPath(root *TreeNode, dep int, res *int) {
if root != nil {
dep++
if root.Left == nil && root.Right == nil {
if dep < *res || *res == 0 {
*res = dep
}
} else {
searchPath(root.Left, dep, res)
searchPath(root.Right, dep, res)
}
}
}
复制代码
划线
评论
复制
发布于: 刚刚阅读数: 2
方勇(gopher)
关注
Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入
我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!
评论