algorighm/top-interview-leetcode150/binary-tree/104二叉树的最大深度.js

50 lines
1.4 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 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}
*/
const maxDepth = function (root) {
};
/*
这非常符合递归操作,如需直到这颗数的最大深度,只需计算左右子树的深度中较大的,加上自己的这一层
不就是整颗数的深度吗?
*/
function f1(root) {
if (!root) return 0;
return Math.max(f1(root.left), f1(root.right)) + 1;
}
/*
利用BFS来查找每一层的所有节点然后遍历所有每一层的所有节点把查找是否有下一层节点然后
把计数加1直到这一层没有任何节点
*/
function f2(root) {
if (!root) return 0;
const queue = [root]; // 初始化队列,将根节点加入队列
let depth = 0;
while (queue.length > 0) {
const levelSize = queue.length; // 当前层的节点个数
for (let i = 0; i < levelSize; i++) {
const node = queue.shift(); // 从队列中取出一个节点
if (node.left) queue.push(node.left); // 如果左子节点存在,加入队列
if (node.right) queue.push(node.right); // 如果右子节点存在,加入队列
}
depth++; // 每完成一次层级遍历,深度加一
}
return depth;
}