一、题目描述(javascript解题):
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例: 给定二叉树 [3,9,20,null,null,15,7]
返回它的最大深度为3
二、思路分析
这里我想到的是递归思想,我们知道二叉树是有左子树和右子树的,如果我们知道了左子树left和右子树right的最大深度
l和r,那么该二叉树的最大深度即为max(l,r),而左子树和右子树的最大深度可以以同样的方式进行计算从而获得。因此我们在
计算当前二叉树的最大深度时,可以先递归计算出其左子树和右子树的最大深度,然后再返回当前二叉树的最大深度
实现代码如下
var maxDepth = function (root){
if(root==null){
return 0;
}else{
let left = maxDepth(root.left);
let right = maxDepth(root.right);
return Math.max(left,right)+1;
}
}
而后我想着能不能优化下代码,当然我使用的还是递归思想,如果当前的节点为空,则直接返回深度;如果不为空,那么递归其左右节点,再选择左右节点中最大的那个+1。
实现代码如下
var maxDepth = function (root) {
if(root==null){
return 0
}
return Math.max(maxDepth(root.left),maxDepth(root.right))+1
}
两组代码的运行比较
三、总结
该题考查的是算法思想中二叉树的相关知识,也是我们需要多加理解的地方,本题的解法思路有多种,而本人选择了自己最了解的一种思路去求解,自己也会不断去学习,加强自身的算法能力,如果还有其他解法,欢迎各位大佬评论区讨论
最后
本文正在参与「掘金 2021 春招闯关活动」, 点击查看 juejin.cn/post/693314…