LeetCode 104. 二叉树的最大深度 | 算法-从菜鸟开始i

简介: LeetCode 104. 二叉树的最大深度 | 算法-从菜鸟开始i

一、LeetCode 104. 二叉树的最大深度


题目介绍:


给定一个二叉树,找出其最大深度。


二叉树的深度为根节点到最远叶子节点的最长路径上的节点数。


说明: 叶子节点是指没有子节点的节点。


示例: 给定二叉树 [3,9,20,null,null,15,7],


3
   / \
  9  20
    /  \
   15   7


返回它的最大深度 3 。


方案一:DFS 深度优先查找


DFS是在树中遍历节点经常使用的一种方式 - 深度优先查找。


/**
 * @method maxDepthByDFS
 * @description: 深度优先查找 - DFS
 * @param {TreeNode} root
 * @return {*}
 */
function maxDepthByDFS(root: TreeNode | null): number {
  // 临界点条件
  if (root === null) {
    return 0;
  }
  // 当root存在时,分别获取下左侧节点的深度、右侧节点深度
  let leftDepLength = 1 + maxDepthByDFS(root.left);
  let rightDepLength = 1 + maxDepthByDFS(root.right);
  // 比较二者的最大值
  return Math.max(leftDepLength, rightDepLength);
}


提交代码,看下效果~


网络异常,图片无法展示
|


方案二:BFS 广度优先遍历


在遍历树的节点时,从横向上看,每一层都表示了树的深度。假定我们把横向的元素,依次放入数组队列中,每一次都放一层,只要我们遍历队列,每遍历依次就表示深度+1。


/**
 * @method maxDepthByBFS
 * @description: 广度优先查找 - BFS
 * @param {TreeNode | null} root
 * @return {number}
 */
function maxDepthByBFS(root: TreeNode | null): number {
  // 临界点条件
  if (root === null) {
    return 0;
  }
  // 定义队列存储节点的值 - 存储每一层的节点
  const queue = [root];
  // 记录树深度
  let depLength = 0;
  // 当队列中存在元素是,表示有一层
  while (queue.length) {
    // 获取当前队列中,指向当前层所有元素的长度
    const currentLevelLength = queue.length;
    // 将当前层元素依次出队
    for (let i = 0; i < currentLevelLength; i++) {
      // 获取队列的第一个元素
      const node = queue.shift();
      // 如果left节点存在,在队列中压入
      if (node?.left) {
        queue.push(node.left);
      }
      // 如果left节点存在,在队列中压入
      if (node?.right) {
        queue.push(node.right);
      }
    }
    // 每遍历依次都代表了一层
    depLength++;
  }
  // 返回结果即可
  return depLength;
}


结语


了解DFS和BFS区别以及使用方式.


相关文章
|
26天前
|
算法
分享一些提高二叉树遍历算法效率的代码示例
这只是简单的示例代码,实际应用中可能还需要根据具体需求进行更多的优化和处理。你可以根据自己的需求对代码进行修改和扩展。
|
29天前
|
存储 缓存 算法
如何提高二叉树遍历算法的效率?
选择合适的遍历算法,如按层次遍历树时使用广度优先搜索(BFS),中序遍历二叉搜索树以获得有序序列。优化数据结构,如使用线索二叉树减少空指针判断,自定义节点类增加辅助信息。利用递归与非递归的特点,避免栈溢出问题。多线程并行遍历提高速度,注意线程安全。缓存中间结果,避免重复计算。预先计算并存储信息,提高遍历效率。综合运用这些方法,提高二叉树遍历算法的效率。
49 5
|
29天前
|
存储 算法 Java
leetcode算法题-有效的括号(简单)
【11月更文挑战第5天】本文介绍了 LeetCode 上“有效的括号”这道题的解法。题目要求判断一个只包含括号字符的字符串是否有效。有效字符串需满足左括号必须用相同类型的右括号闭合,并且左括号必须以正确的顺序闭合。解题思路是使用栈数据结构,遍历字符串时将左括号压入栈中,遇到右括号时检查栈顶元素是否匹配。最后根据栈是否为空来判断字符串中的括号是否有效。示例代码包括 Python 和 Java 版本。
|
1月前
|
机器学习/深度学习 JSON 算法
二叉树遍历算法的应用场景有哪些?
【10月更文挑战第29天】二叉树遍历算法作为一种基础而重要的算法,在许多领域都有着不可或缺的应用,它为解决各种复杂的问题提供了有效的手段和思路。随着计算机科学的不断发展,二叉树遍历算法也在不断地被优化和扩展,以适应新的应用场景和需求。
32 0
|
2月前
|
算法
每日一道算法题(Leetcode 20)
每日一道算法题(Leetcode 20)
29 2
|
2月前
|
存储 算法 关系型数据库
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
这篇文章主要介绍了多路查找树的基本概念,包括二叉树的局限性、多叉树的优化、B树及其变体(如2-3树、B+树、B*树)的特点和应用,旨在帮助读者理解这些数据结构在文件系统和数据库系统中的重要性和效率。
26 0
数据结构与算法学习二一:多路查找树、二叉树与B树、2-3树、B+树、B*树。(本章为了解基本知识即可,不做代码学习)
|
2月前
|
存储 算法 搜索推荐
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
这篇文章主要介绍了顺序存储二叉树和线索化二叉树的概念、特点、实现方式以及应用场景。
28 0
数据结构与算法学习十七:顺序储存二叉树、线索化二叉树
|
2月前
|
存储 算法
数据结构与算法学习十六:树的知识、二叉树、二叉树的遍历(前序、中序、后序、层次)、二叉树的查找(前序、中序、后序、层次)、二叉树的删除
这篇文章主要介绍了树和二叉树的基础知识,包括树的存储方式、二叉树的定义、遍历方法(前序、中序、后序、层次遍历),以及二叉树的查找和删除操作。
30 0
|
2月前
【LeetCode 43】236.二叉树的最近公共祖先
【LeetCode 43】236.二叉树的最近公共祖先
20 0
|
2月前
【LeetCode 38】617.合并二叉树
【LeetCode 38】617.合并二叉树
15 0