力扣第111题Golang答案 二叉树的最小深度
// 方法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
}