1. 深度优先算法

class Solution{public List<List<Integer>> levelOrder(TreeNode root){List<List<Integer>> result = new ArrayList<>() ;if (root != null){ // 如果这是一个空的二叉树dfs(result, root, 0) ;}return result ;}// 通过leve来记录节点所在的层private void dfs(List<List<Integer>> result, TreeNode node, int level){// 当读入一个新的深度时if (result.size() - 1 < level){result.add(new ArrayList<Integer>()) ;}// 加入当前的节点值result.get(level).add(node.val) ;// 如果左节点不为空if (node.left != null){// 遍历所有的左节点---深度+1dfs(result, node.left, level + 1) ;}// 如果右节点不为空if (node.right != null){// 遍历所有的右节点---深度 + 1dfs(result, node.right, level + 1) ;    }}
}

2. 广度优先算法

public class Solution {/*** * @param root TreeNode类 * @return int整型ArrayList<ArrayList<>>*/public ArrayList<ArrayList<Integer>> levelOrder (TreeNode root) {// write code hereArrayList<ArrayList<Integer>> result = new ArrayList<ArrayList<Integer>>();if (root == null){return result;}// 0.创建一个队列Queue<TreeNode> queue = new LinkedList<TreeNode>();// 1.将根节点放进去[第一层节点]queue.offer(root);// 队列为空退出循环while (!queue.isEmpty()){int size = queue.size(); // 记住当前层node的个数// 2.新建list用来记录每一层的数据ArrayList<Integer> list = new ArrayList<Integer> ();// 遍历上一层的节点并放入下一层的节点for (int i = 0; i < size; i ++){// 3.当前队列出栈放入listTreeNode node = queue.poll();list.add(node.val);// 4. 当前的queue出队列并遍历该节点的左右子节点放入队列if (node.left != null){queue.offer(node.left);}if (node.right != null){queue.offer(node.right);}}// 5.将当前层所有的node.val放入result中result.add(list);}return result;}
}

作者:nettee
链接:https://leetcode-cn.com/problems/binary-tree-level-order-traversal/solution/bfs-de-shi-yong-chang-jing-zong-jie-ceng-xu-bian-l/
来源:力扣(LeetCode)

二叉树深度优先广度优先算法相关推荐

  1. 树与二叉树的深度优先与广度优先算法(递归与非递归)

    本博客前面文章已对树与二叉树有过简单的介绍,本文主要是重点介绍有关二叉树的一些具体操作与应用 阅读本文前,可以先参考本博客 各种基本算法实现小结(三)-- 树与二叉树   和  各种基本算法实现小结( ...

  2. python爬虫算法深度优先_爬虫课程(四)|深度优先和广度优先算法

    深度优先和广度优先算法在爬取一个整站上经常用到,本课程主要讲解这两个算法的原理以及使用过程. 一.网站的树结构 1.1.一个网站的url结构图 以知乎为例,知乎目前有发现.话题.Live.书店.圆桌. ...

  3. (造轮子)C 创建队列和图实现广度优先算法(BFS)和深度优先算法(DFS)(数据结构)

    链表.队列和图实现BFS和DFS算法(C+造轮子+详细代码注释) 1.队列的链式存储结构   队列的链式表示称为链队列,它实际上是一个同时带有队头指针和队尾指针的单链表.头指针指向队头节点,尾指针指向 ...

  4. 带父节点的平衡二叉树_Python算法系列—深度优先遍历算法【二叉树】

    一.什么是深度优先遍历 深度优先遍历算法是经典的图论算法.从某个节点v出发开始进行搜索.不断搜索直到该节点所有的边都被遍历完,当节点v所有的边都被遍历完以后,深度优先遍历算法则需要回溯到v以前驱节点来 ...

  5. C++ 二叉树深度优先遍历和广度优先遍历

    二叉树的创建代码==>C++ 创建和遍历二叉树 深度优先遍历:是沿着树的深度遍历树的节点,尽可能深的搜索树的分支. //深度优先遍历二叉树void depthFirstSearch(Tree r ...

  6. Python算法系列—深度优先遍历算法【二叉树】

    深度优先遍历算法之二叉树 一.什么是深度优先遍历 二.二叉树 1. 二叉树简介 2.二叉树类型 3.二叉树相关术语 4. 二叉树的节点代码 5. 二叉树遍历顺序 6.深度优先遍历和广度优先遍历 三.面 ...

  7. 深度优先和广度优先算法(例题)

    在LeetCode上面刷题刷到一道二叉树的题,这道题我认为对学习树的深度优先和广度优先算法有一定的帮助,先来看一下题 这道题是这样的: 给定一棵二叉树,想象自己站在它的右侧,按照从顶部到底部的顺序,返 ...

  8. 应对笔试手写代码,如何准备深度优先算法 广度优先算法?

    应对笔试手写代码,如何准备深度优先算法 & 广度优先算法? 1. 什么是深度优先算法?什么又是广度优先算法? 2. 广度优先算法使用场景 3. 广度优先算法模板 4. 深度优先算法使用场景 5 ...

  9. 浅谈网络爬虫中广度优先算法和深度优先算法

    前言 做爬虫的,最怕业务简单粗暴的来一句"爬一下XXXX网".比如,"爬一下央广网"(示例链接:http://www.cnr.cn),看着密密麻麻的各种子分类, ...

最新文章

  1. 【财经】创业的10条定律 10大烦恼
  2. [感动]看来的故事:小孩和鱼
  3. 使用uwsgi和gunicorn部署Django项目
  4. java 管理多个进程_管理多个Java安装
  5. python模拟一个简单的取款机,python简单区块链模拟详解
  6. 【Ahoi2005】【BZOJ1968】COMMON 约数研究(水题,乱搞,约数)
  7. 测试评审要点说明(测试计划、用例、报告)
  8. 源码构建python3
  9. java怎么输出英文字母表_Java程序设计(八)----输出英文字母表、希腊字母表
  10. 某程序员披露华为外包员工现状:工作氛围好,没有歧视,但转正后也不算正式员工?...
  11. 巴菲特十大量化选股经
  12. 欧拉公式matlab
  13. cxf webservice接口
  14. Mybatis 任务二:配置文件深入
  15. linux下修改网卡MAC地址
  16. zeromq初体验C语言版本测试程序及C++测试程序
  17. 安卓分屏模式的简单适配
  18. JAVA毕业设计web唐院寻人表白系统计算机源码+lw文档+系统+调试部署+数据库
  19. ajax瀑布流加载重叠,使用瀑布流插件masonry,图片未加载完就会出现重叠现象,怎么解决?...
  20. 写一个将华氏温度转换成摄氏温度的程序,转换的公式是:°F = (9/5)*°C + 32 其中C表示摄氏温度F表示华氏温度程序的输入是一个整数表示华氏温度。输出对应的摄氏温度也是一个整数(java)

热门文章

  1. RTO焚烧炉适合处理多少浓度的有机废气
  2. linux系统日志分几个等级,Linux下日志系统详解
  3. Mysql-时间差计算(分钟)
  4. Android学习笔记(三)Application类简介
  5. 修改Oracle统计信息保留时间
  6. c++关键词explicit和implicit详解
  7. levy 计算机辅助教学,计算机辅助教学在高校英语专业学术论文写作课程中应用.doc...
  8. C语言实战:弹球小游戏
  9. ClassCastException发生的原因以及解决方案
  10. 给自己心灵一杯下午茶