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,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!











评论