文章目录
111. 二叉树的最小深度
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点
的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
示例 1:
输入:root = [3,9,20,null,null,15,7]
输出:2
示例 2:
输入:root = [2,null,3,null,4,null,5,null,6]
输出:5
提示:
- 树中节点数的范围在 [0, 10^5] 内
- -1000 <= Node.val <= 1000
解题思路
递归法
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func minDepth(root *TreeNode) int {
if root == nil {
return 0
}
res := math.MaxInt32
dfs(root,1,&res)
return res
}
func dfs(root *TreeNode,depth int ,res *int) {
if root == nil {
return
}
// 中,处理逻辑:判断是不是叶子结点,更新最小深度
if root.Left == nil && root.Right == nil {
if depth < *res {
*res = depth
}
}
if root.Left != nil { // 左
dfs(root.Left,depth + 1,res)
}
if root.Right != nil { // 右
dfs(root.Right,depth + 1,res)
}
}
迭代法
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func minDepth(root *TreeNode) int {
if root == nil {
return 0
}
// 层序遍历,遍历到第一个左右孩子为空的节点(叶子节点)所在层,就是最小深度
queue := make([]*TreeNode,0)
queue = append(queue,root)
depth := 0
for len(queue) > 0 {
queueSize := len(queue)
depth++
for i := 0;i < queueSize;i++ {
curNode := queue[0]
queue = queue[1:]
// 遍历到了第一个叶子节点所在的层,当前层就是最小深度
if curNode.Left == nil && curNode.Right == nil {
return depth
}
if curNode.Left != nil {
queue = append(queue,curNode.Left)
}
if curNode.Right != nil {
queue = append(queue,curNode.Right)
}
}
}
return depth
}
标签:TreeNode,nil,res,最小,queue,depth,111,二叉树,root
From: https://blog.csdn.net/YouMing_Li/article/details/142967650