针对以下内容:
var maxDepth = function(root) {
if(!root){
return 0
}
var leftMax=maxDepth(root.left)
var rightMax=maxDepth(root.right)
return Math.max(leftMax, rightMax)+1};
我不明白变量leftMax和rightMax如何与Math.max结合使用。变量编号如何?
例如,假设树看起来像这样:
a
/
b
/
c
因此,首先到达此处:var leftMax = maxDepth(root.left),root.left为b。此时剩下的还有什么?是一些数字,数字从哪里来?
谢谢
答案 0 :(得分:0)
二叉树的最大深度可以表示为其子树距左或右子级的最大深度加当前级别的1。如果子树的深度为空(无左子或右子),则使子树的深度为0。
这些子树的深度可以用相同的方法来计算。
var leftMax=maxDepth(root.left)
var rightMax=maxDepth(root.right)
因此,算法将子树划分成一片叶子。叶子没有子代(相当于“每个子代的深度为零”),因此子树的最大深度为零。
if(!root){ // no child for the parent node
return 0
}
现在让我们为当前级别加1,然后返回上一个调用。左右子树执行相同的操作,因此算法在每次迭代结束时都知道左右子树的深度:
var leftMax=maxDepth(root.left)
var rightMax=maxDepth(root.right)
这意味着当前树的深度为max(子树深度),当前层的深度为1:
return Math.max(leftMax, rightMax)+1};
在您的示例中,该算法首先在左侧的子级上尽可能深入,然后返回访问右侧的子级。该策略称为Depth-first search