写点什么

111. 二叉树的最小深度

作者:方勇(gopher)
  • 2022 年 3 月 27 日
  • 本文字数:895 字

    阅读完需:约 3 分钟

111. 二叉树的最小深度

难度简单 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) } }}
复制代码


用户头像

Dead or Alive. 生存战斗是知识的源泉! 2018.11.08 加入

我是一名SRE哨兵,目前是好大夫基础架构部高级工程师。专注于 SRE,微服务、中间件的稳定性和可用性建设,整体负责好大夫服务治理云平台的设计和搭建!

评论

发布
暂无评论
111. 二叉树的最小深度_数据结构算法_方勇(gopher)_InfoQ写作平台