题目
104. 二叉树的最大深度
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
说明: 叶子节点是指没有子节点的节点。
示例: 给定二叉树 [3,9,20,null,null,15,7],
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
思路1:
广度优先遍历,很经典的写法了。
- 用队列的思想,将根节点推入队列queue,
- 然后队列头节点依次出队,判断该节点是否有子节点,有的话,分别把左右节点再推入队列
这样即可达到一个广度优先的效果。
这题就是在这个过程中记录一下deep的值即可。
代码如下:
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function(root) {
if(!root) return 0;
let deep = 0;
let queue = [];
queue.push(root);
while(queue.length>0){
let size = queue.length;
deep++;
while(size>0){
let node = queue.shift();
if(node.left) queue.push(node.left);
if(node.right) queue.push(node.right);
size--
}
}
return deep;
};
思路2:
深度优先遍历。
递归的思想。
每一个节点到树的最远的叶子节点的高度 === 左右子节点更高的那个加1。
代码如下:
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function(root) {
if(!root) return 0;
let leftDepth = maxDepth(root.left);
let rightDepth = maxDepth(root.right);
return Math.max(leftDepth, rightDepth) + 1;
};