// 方法1:使用广度优先遍历 func minDepth(root *TreeNode) int { // 如果传进来的节点是空,返回0 if root == nil { return 0 } // 创建一个队列,存放节点和层数 [[node, int]] type floor struct { Node *TreeNode Floor int } var queue []floor queue = append(queue, floor{ Node: root, Floor: 1, }) // 当队列中有值的时候 for len(queue) != 0 { // 移除队列头部元素(队列先进先出) tempFloor := queue[0] queue = queue[1:] // 如果取出的元素中的节点是叶子节点,返回层数 if tempFloor.Node.Left == nil && tempFloor.Node.Right == nil { return tempFloor.Floor } // 将左子树加入到队列 if tempFloor.Node.Left != nil { leftFloor := floor{ Node: tempFloor.Node.Left, Floor: tempFloor.Floor + 1, } queue = append(queue, leftFloor) } // 将右子树加入到队列 if tempFloor.Node.Right != nil { rightFloor := floor{ Node: tempFloor.Node.Right, Floor: tempFloor.Floor + 1, } queue = append(queue, rightFloor) } } return 0 }