开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第15天,点击查看活动详情
引言
算法的技能对于程序员是百益而无一害,作为程序员无论是前端还是后端算法技能对于我们都是十分十分的重要,我将陆续整理并讲解前端程序员必须掌握的经典算法。
题目描述
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
分析
根据题目的分析,我们如何求二叉树的最大深度?根据二叉树的特点,我们可以初步拟定递归与非递归的两种方案,综合分析基于递归的方式更加简单并且实现思路也是十分的具体和灵活。
- 设计递归求二叉树高度的函数。
- 设计递归函数的出口是节点是空返回0
- 每次累加左右孩子的高度,当前节点的高度总是左右孩子节点最大高度的一个+1
- 递归最后返回高度结果。
解答
```
/**
* Definition for a binary tree node.
* function TreeNode(val, left, right) {
* this.val = (val===undefined ? 0 : val)
* this.left = (left===undefined ? null : left)
* this.right = (right===undefined ? null : right)
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function(root) {
const main = node => {
if(node) {
let left = main(node.left)
let right = main(node.right)
return left>right?left+1:right+1
}return 0
}
return main(root)
};
```
通过题目的分析,我们按照递归的设计完成了求二叉树高度的需求处理,整体的设计方案按照方案完成就可以了。
总结
二叉树的最大深需要我们仔细分析问题,通过对问题的拆解可以快速的完成对问题的求解。我们必须牢固的掌握其在具体应用和实践的应用。