LeetCode - 104. 二叉树的最大深度
题目
给定一个二叉树,找出其最大深度。
二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。
注意:
叶子节点是指没有子节点的节点。
示例:
给定二叉树 [3,9,20,null,null,15,7]
,
3
/ \
9 20
/ \
15 7
返回它的最大深度 3 。
解题思路
1. 递归
如果我们知道了左子树和右子树的最大深度 l 和 r,那么该二叉树的最大深度即为 max(l, r) + 1
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function(root) {
// 递归
if (root == null) return 0
return 1 + Math.max(maxDepth(root.left), maxDepth(root.right))
};
2. 广度优先搜索
- 在栈中存放当前层的所有节点
- 遍历并取出栈中节点,放入取出节点的子节点
- 处理栈的层数即为该树的最大深度
/**
* Definition for a binary tree node.
* function TreeNode(val) {
* this.val = val;
* this.left = this.right = null;
* }
*/
/**
* @param {TreeNode} root
* @return {number}
*/
var maxDepth = function(root) {
// 广度优先 BFS
if (root == null) return 0 // 处理边界
let stack = [root] // root 入栈
let count = 0 // 记录操作次数
while (stack.length) {
let clen = stack.length // 记录需要出栈的个数
while (clen) {
let cur = stack.shift() // 出栈当前层, 入栈下层
if (cur.left) stack.push(cur.left)
if (cur.right) stack.push(cur.right)
clen--
}
count++
}
return count
};