[算法] 二叉树的DFS与BFS算法 (Java) -- 痛定思痛 彻底搞懂

二叉树的DFS与BFS算法 (Java)

1.概念

①DFS (深度优先搜索)

维基百科读一遍
定义看完, 看一遍gif
在这里插入图片描述

②BFS (广度优先搜索)

维基百科读一遍
gif看一遍
在这里插入图片描述

2. 算法实现

二叉树节点结构:

public class TreeNode {int value;TreeNode left;TreeNode right;public TreeNode(int value){this.value = value;}
}

代码模拟实现:

import java.util.ArrayDeque;
import java.util.Stack;public class BinaryTree {TreeNode root;public BinaryTree(int[] array){root = makeBinaryTree(array, 1);}/*** 递归创建二叉树* @param array 数组* @param index 索引* @return 二叉链表示(二叉树)*/public static TreeNode makeBinaryTree(int[] array, int index){if (index < array.length){// index为根节点索引int value = array[index];// 排除为0的节点if (value != 0){TreeNode treeNode = new TreeNode(value);array[index] = 0;// 递归treeNode.left = makeBinaryTree(array, index * 2);treeNode.right = makeBinaryTree(array, index * 2 + 1);return treeNode;}}return null;}/*** 深度优先搜索遍历-先序遍历(先遍历根)* 非递归实现*/public void DFS(){if (root == null){System.out.println("empty tree");return;}// 栈, 先进后出Stack<TreeNode> stack = new Stack<>();stack.push(root);while(stack.isEmpty() == false){// 移除堆栈顶部对象,并作为次函数的值返回该对象TreeNode node = stack.pop();System.out.print(node.value + "  ");if (node.right != null){stack.push(node.right);}if (node.left != null){stack.push(node.left);}}System.out.println();}/*** 广度优先搜索* 非递归实现*/public void BFS(){if (root == null){System.out.println("empty tree");return;}// 队列, 先进先出ArrayDeque<TreeNode> treeNodes = new ArrayDeque<>();treeNodes.add(root);while (treeNodes.isEmpty() == false){// 删除队列中的第一个元素,并返回该元素的值TreeNode node = treeNodes.remove();System.out.print(node.value + "  ");if (node.left != null){treeNodes.add(node.left);}if (node.right != null){treeNodes.add(node.right);}}System.out.println();}public static void main(String[] args) {int[] arr = {0,14,11,13,23,53,1,8,0,9,45,78,99,0,0};BinaryTree tree = new BinaryTree(arr);tree.DFS();tree.BFS();}
}

运行结果:

深度优先搜索: 
14  11  23  9  53  45  78  13  1  99  8  
广度优先搜索: 
14  11  13  23  53  1  8  9  45  78  99    

其实二叉树可以看成这样:

深度优先搜索:14/       \11          13/   \       /    \23     53     1      8\    /  \   /9  45  78  99

痛定思痛, 不搞懂你永远都不懂!!!

看不懂的去debug, 一行一行看!!! 不要不懂装懂!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/562476.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

win10 4k分屏 eclipse等工具打开后按钮图标大小问题解决方案

1、打开显示设置 2、打开eclipse属性、直接上图&#xff1a;

Navicat连接Mysql 8.0.16报错:Client does not support authentication protocol requested by server?

解决方法的命令如下&#xff1a; 切换到mysql安装目录下 &#xff1a;C:\Program Files\MySQL\MySQL Server 8.0\bin 登录进去执行以下命令 use mysql; alter user rootlocalhost identified with mysql_native_password by ********; flush privileges;

基于Java学院网页的搜索引擎设计和实现

项目运行部署&#xff1a; 首先导入项目MyHeritrix 然后把jar包加到项目中运行类Heritrix访问地址http://localhost:8080/index.jsp创建一个job 6.然后写name和你自己的url 7.然后修改modules&#xff0c;只需要修改select writes和select post processors 后面导入第二个程序…

基于java springboot+mybatis学生学科竞赛管理管理系统设计和实现

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

基于JavaWeb SSM mybatis 学生信息管理系统设计和实现以及文档报告

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1f…

基于Java swing ATM简单的银行管理系统

项目介绍&#xff1a; 本项目是使用Java swing开发&#xff0c;可实现ATM系统/银行系统的基本登陆、转账、查询余额、存取款业务。界面设计比较简介 项目结构&#xff1a; 运行截图&#xff1a; 相关系统设计实现推荐&#xff1a; 基于java springbootmybatis电影售票网站管…

基于javaweb(springboot+mybatis)网站建设服务管理系统设计和实现以及文档报告设计

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 文末获取源码联系方式 &#x1f4dd; 主要技…

电脑怎么重置host_电脑又双叒叕卡顿?究竟要“重装”还是“重置”?原来这区别大了...

"啊!!!"随着一声惨叫&#xff0c;名侦探韩博士决定去一探究竟&#xff01;原来是一小伙伴们的电脑又双叒叕卡顿了&#xff0c;连文件都来不及保存电脑就直接"歇菜"了。作为21世界最佳优秀青年代表&#xff0c;望着这一脸生无可恋的小伙伴&#xff0c;韩博士…

[LeetCode] 118. 杨辉三角(Java)

[LeetCode] 118. 杨辉三角(Java) 1.题目描述 给定一个非负整数 *numRows&#xff0c;*生成「杨辉三角」的前 numRows 行。 在「杨辉三角」中&#xff0c;每个数是它左上方和右上方的数的和。 示例 1:输入: numRows 5 输出: [[1],[1,1],[1,2,1],[1,3,3,1],[1,4,6,4,1]] 示例…

基于javaweb(springboot+mybatis)宠物医院预约管理系统设计和实现以及论文报告

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345;文末获取源码联系方式 &#x1f4dd; 项目…

基于javaweb(springboot+mybatis)网上家具商城项目设计和实现以及文档报告

具体功能模块&#xff1a; (1) 用户注册和登录登录功能&#xff1a; ①用户的注册功能 : 访问网站的人根据网站的提示注册自己的账户 ②用户的登录功能 : 用户可以输入用户名和密码进行登录操作&#xff0c;当没有该账户的时 候&#xff0c;提示错误&#xff0c;用户必须通过…

Java SSM (springboot+mybatis)美食菜谱分享平台系统设计和实现以及论文报告

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、【java李杨勇】公号作者✌ 简历模板、学习资料、面试题库【关注我&#xff0c;都给你】 &#x1f345;文末获取源码联系&#x1f345; 临近学期结束&#xff…

两次结果的绝对差值_你知道电子天平的检定和检定结果的影响因素有哪些吗?...

插播个小故事&#xff1a;某天一位朋友的用户对朋友说要买一台天平&#xff0c;制定的URS太“猖狂”没有能满足的天平&#xff0c;朋友硬着头皮报了一个型号&#xff0c;鞋子和脚不匹配&#xff0c;穿鞋的果然来找卖鞋子的&#xff1a;用户要买量程1100g&#xff0c;百分之一的…

基于javaweb(springboot+mybatis)网上酒类商城项目设计和实现以及文档报告

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 文末获取源码联系方式 &#x1f4dd; 具体…

element手机验证格式_Laravel 自定义封装表单验证类

Laravel版本6.x场景&#xff1a;为添加或者更新用户的时候自动验证表单创建表单请求使用 Artisan 命令 make:request 来创建表单请求类&#xff1a;php artisan make:request Request这会在 app/Http/Requests 目录下创建一个 appHttpRequestsRequest.php 文件&#xff0c;修改…

基于javaweb(springboot)汽车配件管理系统设计和实现以及文档报告

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 文末获取源码联系方式 &#x1f4dd; 主要功…

JDK JRE JVM的关系

JDK JRE JVM的关系 名词解释 JDK: java开发工具包( java development kit )JRE:java运行时环境( java runtime environment )JVM:java虚拟机( java virtual machine ) 范围大小 JDK > JRE > JVM

c++上传oss中文路径报错_C# 从Oss对象存储器上下载文件到本地打包下载代码

[HttpGet][Route("downloadimgszip")]public void downloadimages(string goodsid){//获取所有图片路径List<string> arraylist GetAllImagePathsByGoodId(goodsid);var DownPicpath System.Web.HttpContext.Current.Server.MapPath("/DownPicPackge&qu…

基于javaweb(springboot+mybatis)生活美食分享平台管理系统设计和实现以及文档报告

&#x1f345; 作者主页&#xff1a;Java李杨勇 &#x1f345; 简介&#xff1a;Java领域优质创作者&#x1f3c6;、Java李杨勇公号作者✌ 简历模板、学习资料、面试题库、技术互助【关注我&#xff0c;都给你】 &#x1f345; 文末获取源码联系方式 &#x1f4dd; 主要…