1. 问题描述
给定一个二叉树,找出其最小深度。
最小深度是从根节点到最近叶子节点的最短路径上的节点数量。
说明:叶子节点是指没有子节点的节点。
2. 思路
2.1. 递归
- 确定递归函数的参数和返回值
func minDepth(root *TreeNode) int
- 确定终止条件
if root == nil {
return 0
}
- 确定单层循环逻辑
leftDepth := minDepth(root.Left)
rightDepth := minDepth(root.Right)
if root.Left == nil && root.Right != nil {
return 1 + rightDepth
}
if root.Left != nil && root.Right == nil {
return 1 + leftDepth
}
if leftDepth > rightDepth {
leftDepth = rightDepth
}
return leftDepth + 1
2.2. 迭代
层序遍历模板题
3. 代码
3.1. 递归代码
/**
* 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
}
leftDepth := minDepth(root.Left)
rightDepth := minDepth(root.Right)
if root.Left == nil && root.Right != nil {
return 1 + rightDepth
}
if root.Left != nil && root.Right == nil {
return 1 + leftDepth
}
if leftDepth > rightDepth {
leftDepth = rightDepth
}
return leftDepth + 1
}
3.2. 迭代代码
/**
* Definition for a binary tree node.
* type TreeNode struct {
* Val int
* Left *TreeNode
* Right *TreeNode
* }
*/
func minDepth(root *TreeNode) int {
var res int
if root == nil {
return 0
}
queue := []*TreeNode{root}
for len(queue) != 0 {
length := len(queue)
for i := 0; i < length; i++ {
if queue[0].Left != nil {
queue = append(queue, queue[0].Left)
}
if queue[0].Right != nil {
queue = append(queue, queue[0].Right)
}
if queue[0].Left == nil && queue[0].Right == nil {
return res + 1
}
queue = queue[1:]
}
res++
}
return res
}