【leetcode】543.二叉树的直径

54 阅读1分钟

leetcode-543.png

这一题配合最大深度104题食用更佳 首先来看下104题的递归写法代码

var maxDepth = function (root) {
    if (!root) return 0 
    return Math.max(maxDepth(root.left), maxDepth(root.right)) + 1
};

上面这种写法如果有点难懂的话,看看下面这段代码

var maxDepth = function (root) {
    if (!root) return 0
    let left = maxDepth(root.left)
    let right = maxDepth(root.right)
    return Math.max(left, right) + 1
};

其实逻辑没有任何变化,计算左、右节点的最大深度,然后取出最大深度 +1
+1是因为每次深度遍历一次的时候都向下探一次,所以需要+1

理解完上面这段代码之后再来看543题
这里就是要计算某个节点的左右节点最大之和,那么这里就多了一个操作了——记录每次的最大和
下面看下代码

var diameterOfBinaryTree = function (root) {
    let res = 0
    var maxDepthSum = function (root) {
        if (!root) return 0
        let maxLeft = maxDepthSum(root.left)
        let maxRight = maxDepthSum(root.right)
        res = Math.max(res, maxLeft + maxRight)
        return Math.max(maxLeft, maxRight) + 1
    }
    maxDepthSum(root)
    return res
};

仔细观察下maxDepthSum的代码,和上面的计算深度唯一的区别就是多了一个存最大值的过程