题目描述
力扣地址 : 给定一个二叉树,找出其最大深度。 我们使用二种方式即广度优先搜索和迭代法来进行解题。其中,广度优先搜索是一种逐层遍历树结构的算法,而迭代法则是通过循环遍历节点的方法来计算二叉树的最大深度。
解题思路1:广度优先搜索(BFS)
广度优先搜索是一种逐层遍历树结构的算法,通过遍历每一层的节点,计算出二叉树的最大深度。
具体实现:
- 使用一个队列存储每一层的节点,同时记录每一层的节点数量。
- 遍历队列中的每一个节点,将其子节点加入队列。
- 遍历完一层后,将层数加1。
代码实现1
const maxDepthBFS = (root) => {
if (!root) return 0;
const queue = [root];
let depth = 0;
while (queue.length) {
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;
};
解题思路2:迭代法
迭代法是一种通过循环遍历节点的方法来计算二叉树的最大深度。
具体实现:
- 使用一个栈存储每一个节点及其所在的深度。
- 遍历栈中的每一个节点,将其子节点及其深度加入栈。
- 遇到叶子节点时,更新最大深度。
代码实现2
const maxDepthIteration = (root) => {
if (!root) return 0;
const stack = [[root, 1]];
let depth = 0;
while (stack.length) {
const [node, curDepth] = stack.pop();
if (!node.left && !node.right) {
depth = Math.max(depth, curDepth);
}
if (node.left) stack.push([node.left, curDepth + 1]);
if (node.right) stack.push([node.right, curDepth + 1]);
}
return depth;
};
以上两种方法都可以用来计算二叉树的最大深度,具体实现上,广度优先搜索需要使用队列,而迭代法需要使用栈。