package main // type TreeNode struct { // Val int // Left *TreeNode // Right *TreeNode // } // func minInt(x, y int) int { // if x < y { // return x // } // return y // } func minDepthIter(root *TreeNode, depth int) int { if root.Left == nil && root.Right == nil { return depth } if root.Left == nil { return minDepthIter(root.Right, depth+1) } if root.Right == nil { return minDepthIter(root.Left, depth+1) } return minInt(minDepthIter(root.Left, depth+1), minDepthIter(root.Right, depth+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 } return minDepthIter(root, 1) } // func main() { // /** // * t1: 5 // * \ // * 4 // * / \ // * 2 3 // */ // t1rl := TreeNode{2, nil, nil} // t1rr := TreeNode{3, nil, nil} // t1r := TreeNode{4, &t1rl, &t1rr} // t1 := &TreeNode{5, nil, &t1r} // fmt.Println(minDepth(t1)) // fmt.Println(minDepth(nil)) // }