图片.png

    递归解决

    1. package main
    2. import (
    3. "fmt"
    4. )
    5. type TreeNode struct {
    6. Val int
    7. Left *TreeNode
    8. Right *TreeNode
    9. }
    10. var min = 1<<63 - 1
    11. func minDepth(root *TreeNode) int {
    12. if root == nil {
    13. return 0
    14. }
    15. dfs(root, 1) //深度递归
    16. return min
    17. }
    18. func dfs(node *TreeNode, depth int) {
    19. if node.Right == nil && node.Left == nil { //递归结束条件
    20. if depth < min {
    21. min = depth
    22. }
    23. return
    24. }
    25. if node.Left != nil { // 遍历左节点
    26. dfs(node.Left, depth+1)
    27. }
    28. if node.Right != nil { // 遍历右节点
    29. dfs(node.Right, depth+1)
    30. }
    31. }
    32. func main() {
    33. a := &TreeNode{
    34. Val: 3,
    35. }
    36. b := &TreeNode{
    37. Val: 9,
    38. }
    39. a.Left = b
    40. c := &TreeNode{
    41. Val: 20,
    42. }
    43. a.Right = c
    44. d := &TreeNode{
    45. Val: 15,
    46. }
    47. c.Left = d
    48. e := &TreeNode{
    49. Val: 7,
    50. }
    51. c.Right = e
    52. fmt.Println(minDepth(a))
    53. }