Go算法

(20)Go递归求二叉树的最大深度和最小深度

2019-05-14  本文已影响0人  哥斯拉啊啊啊哦
求最大深度简单,主要是最小深度有个小陷进要注意

最大深度实现
func maxDepth(root *TreeNode) int {
    // 递归终止条件
    if root == nil {
        return 0
    }

    // 递归过程
    leftMaxDepth := maxDepth(root.Left)
    rightMaxDepth := maxDepth(root.Right)
    // 左右子树的最高深度+1
    return 1 + max(leftMaxDepth, rightMaxDepth)
}

func max(v1, v2 int) int {
    if v1 >= v2 {
        return v1
    }
    return v2
}

提交leetcode,通过

// 这里有个小陷阱,不能跟104反过来,因为叶子节点是没有左右子树的节点
// 如果按104的方案反过来,在[1,2]这种情况下,会返回1,而实际是2
// 所以要多一步判定,左子树为0,返回右子树深度+1,或者右子树为0,返回左子树深度+1
// 左右子树都为0,则返回1
func minDepth(root *TreeNode) int {
    // 递归终止条件
    if root == nil {
        return 0
    }

    // 递归过程
    leftMaxDepth := minDepth(root.Left)
    rightMaxDepth := minDepth(root.Right)

    // 左子树为0,返回右子树深度+1,或者右子树为0,返回左子树深度+1
    // 左右子树都为0,则返回1,3种情况可以整合在一起
    if leftMaxDepth == 0 || rightMaxDepth == 0 {
        return leftMaxDepth + rightMaxDepth + 1
    }

    // 左右子树均不为空
    return 1 + min(leftMaxDepth, rightMaxDepth)
}

func min(v1, v2 int) int {
    if v1 < v2 {
        return v1
    }
    return v2
}

提交leetcode,通过

上一篇 下一篇

猜你喜欢

热点阅读