tree.png

1. 二叉树结构定义

public static class Tree {

int data;

Tree left;

Tree right;

public Tree(int data) {

this.data = data;

}

}

2. 数据初始化

public static Tree initTree() {

Tree node1 = new Tree(1);

Tree node2 = new Tree(2);

Tree node3 = new Tree(3);

Tree node4 = new Tree(4);

Tree node5 = new Tree(5);

Tree node6 = new Tree(6);

Tree node7 = new Tree(7);

Tree node8 = new Tree(8);

Tree node9 = new Tree(9);

node1.left = node2;

node1.right = node3;

node2.left = node4;

node2.right = node5;

node3.left = node6;

node3.right = node7;

node5.right = node8;

node7.left = node9;

return node1;

}

3. 深度优先遍历

3.1 算法

dfs.png

深度优先遍历,是指对每一个可能的分支路径深入到不能再深入为止,而且每个节点只能访问一次。

二叉树的深度优先遍历分为:先序遍历,中序遍历和后续遍历

先序遍历:先访问根,在访问左子树,最后访问右子树,总结就是“根左右”;

中序遍历:先访问左子树,再访问根,最后访问右子树,总结就是“左根右”;

后序遍历:先访问左子树,再访问右子树,最后访问根,总结就是“左右根”。

以下展示先序遍历,利用了Java的Stack栈先进后出的特性:

public static void deepFirstSearch(Tree tree) {

Stack stack = new Stack<>();

stack.push(tree);

while (!stack.isEmpty()) {

Tree node = stack.pop();

System.out.print(node.data + " ");

// stack先进后出,所以先右后左

if (node.right != null) {

stack.push(node.right);

}

if (node.left != null) {

stack.push(node.left);

}

}

System.out.println();

}

3.2 执行结果

1 2 4 5 8 3 6 7 9

4. 广度优先遍历

4.1 算法

bfs.png

广度优先遍历,是指从上至下逐层访问,又称层次遍历。每一层从左至右访问,该层结束后进入下一层访问,直至没有节点为止。

以下展示广度优先遍历,利用了Java的Queue队列先进先出的特性:

public static void broadFirstSearch(Tree tree) {

Queue queue = new LinkedList<>();

queue.add(tree);

while (!queue.isEmpty()) {

Tree node = queue.poll();

System.out.print(node.data + " ");

// queue先进先出,所以先左后右

if (node.left != null) {

queue.add(node.left);

}

if (node.right != null) {

queue.add(node.right);

}

}

System.out.println();

}

4.1 执行结果

1 2 3 4 5 6 7 8 9

java实现二叉树广度优先遍历_二叉树之深度优先和广度优先遍历(Java)相关推荐

  1. java 写文件 权限不够_教你解决Linux系统中JAVA创建文件后权限不足的问题

    在作业中,项目使用文件上传. 这个功能很常见. 当Kai Ge今天更改其官方帐户时,他遇到了一个问题,即无法访问下载的文件,也无法通过浏览器访问该文件. 它是怎么发生的? 经过许多问题之后,事实证明这 ...

  2. Java二叉树逆序遍历_二叉树遍历小结

    二叉树遍历小结 声明 0 二叉树遍历概述 二叉树遍历:按照既定序,对每个节点仅访问一次: 二叉树非递归遍历思想:参考这篇博文,核心思想是存在重合元素的局部有序保证整体有序,由于二叉树的结构特点,二叉树 ...

  3. resultset不支持循环遍历_二叉树的各种遍历方法的简单解释

    二叉树顾名思义,最多两个孩子. 一般规定一个二叉树,因为节点间有相互连接的原因,所以只要给定根节点,那么顺着寻找左孩子和右孩子便可以遍历到所有的节点,这就是遍历的直观解释. 而遍历分为深度遍历和广度遍 ...

  4. 多叉树的前序遍历_二叉树的非递归遍历的思考

    封面图来自wikipedia 1 简介 二叉树的深度优先遍历(前序遍历.中序遍历.后序遍历)是一个比较基本的操作.如果使用递归的做法,很容易写出相应的程序:而如果使用非递归的做法,虽然也能写出相应的代 ...

  5. 二叉树后序遍历_二叉树后序遍历非递归实现

    二叉树的后序遍历非递归实现是三种遍历实现里面最复杂的一种了. 后序遍历的顺序是左节点-右节点-根节点,因为二叉树每个节点只有指向子节点的指针而没有指向父节点的指针,因此我们需要一个额外的变量来记录是否 ...

  6. java二叉树的序列化_二叉树的序列化和反序列化

    import java.util.LinkedList; import java.util.Queue; /** * 序列化和反序列化二叉树 * 先序.后序 * (中序不能实现) * 按层 */ pu ...

  7. c++ 结构体遍历_二叉树(Binary Tree)的建立与遍历——C语言实现

    一.运行环境简介 编辑器:VSCode + MicroSoft原生插件; :cat:‍:dragon:运行环境: MinGW ; :cat:‍:bust_in_silhouette:常用指令: gcc ...

  8. c++层次遍历_二叉树的遍历详解

    概述 二叉树的遍历是一个很常见的问题.二叉树的遍历方式主要有:先序遍历.中序遍历.后序遍历.层次遍历.先序.中序.后序其实指的是父节点被访问的次序.若在遍历过程中,父节点先于它的子节点被访问,就是先序 ...

  9. java二叉树详解_二叉树详解

    树是一种比较重要的数据结构,尤其是二叉树.二叉树是一种特殊的树,在二叉树中每个节点最多有两个子节点,一般称为左子节点和右子节点(或左孩子和右孩子),并且二叉树的子树有左右之分,其次序不能任意颠倒.本篇 ...

最新文章

  1. SG 复习全部 (全部SG 总览)
  2. sdut-1158 C语言实验——两个数最大
  3. ABP理论学习之仓储
  4. python 网络连接_python网络连接之tcp通信
  5. 70条程序员编程的专业名言,你认可几条?
  6. 跳转指令微型计算机,哪种类型的汇编程序跳转指令最有用?
  7. mysql 1449 : The user specified as a definer ('usertest'@'%') does not exist 解决方法 (grant 授予权限)...
  8. mysql 重命名索引_mysql增删改字段,重命名替换字段
  9. 60-40-030-序列化-传统Avro序列化
  10. mysql query generator_mybatis generator生成连接mysql与sqlserver的区别
  11. 1.图像显示图像腐蚀图像模糊canny边缘检测视频操作调用摄像头
  12. notePad++安装及json,xml格式化插件安装
  13. mysql 密码过期解决图例_MYSQL 密码过期解决办法
  14. SwitchHost切换本地Host一键切换开发环境
  15. ps导出切片批量改名
  16. C#面向对象封装继承多态
  17. 浅谈有监督学习的分类与回归
  18. js 内置对象常用方法
  19. 14.Java- Spring
  20. 用python绘制高光谱图像的光谱曲线图

热门文章

  1. 小程序(十六)小程序仿微信聊天页面及功能
  2. 利用ARCGIS和QGIS画等值线图
  3. Bug:数据库的有数据,但是查出来是0
  4. [笔记]快乐的Linux命令行《二》文件系统中跳转
  5. 我愿意做一辈子的程序员
  6. SEO优化的策略_网站seo策略
  7. 去除图片链接边框及其链接虚线
  8. 价格歧视:降价促销的底层逻辑
  9. java实现区域生长算法_matlab 区域生长算法生成二值图像边界区域
  10. 制作适应手机网页、平板电脑(iPad)、电脑网页的三种方法