这一题配合最大深度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的代码,和上面的计算深度唯一的区别就是多了一个存最大值的过程