二叉树深度优先搜索(DFS)- Java

遍历二叉树的深度优先搜索(DFS)和广度优先搜索(BFS)的Java编程实现 深度优先搜索是一种先根遍历的算法,它从根节点开始,递归地访问每个节点的左子树和右子树。以上代码实现了二叉树的深度优先搜索和广度优先搜索算法。使用这两种算法可以遍历二叉树并访问每个节点。广度优先搜索是一种按层遍历的算法,它从根节点开始,逐层地访问每个节点。深度优先搜索和广度优先搜索是常用的二叉树遍历算法。本文将介绍如何使用Java编程语言实现这两种遍历算法。函数,并传入二叉树的根节点来执行相应的遍历算法。希望本文对你理解和实现二叉树遍历算法有所帮助! 阅读详情
public class DFSMain {

    public static void main(String[] args) {
		// 创建二叉树
        TreeNode n11 = new TreeNode(11);
        TreeNode n10 = new TreeNode(10);
        TreeNode n9 = new TreeNode(9);
        TreeNode n8 = new TreeNode(8);
        TreeNode n7 = new TreeNode(7, n11, null);
        TreeNode n6 = new TreeNode(6, n9, n10);
        TreeNode n5 = new TreeNode(5);
        TreeNode n4 = new TreeNode(4, null, n8);
        TreeNode n3 = new TreeNode(3, n6, n7);
        TreeNode n2 = new TreeNode(2, n4, n5);
        TreeNode n1 = new TreeNode(1, n2, n3);

        System.out.println(recursive(n1));  // [1, 2, 4, 8, 5, 3, 6, 9, 10, 7, 11]
        System.out.println(unRecursive(n1));    // [1, 2, 4, 8, 5, 3, 6, 9, 10, 7, 11]
    }


    /**
     * 递归
     */
    public static List<Integer> recursive(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        dfs(root, list);
        return list;
    }

    public static void dfs(TreeNode root, List<Integer> list) {
        if (root == null) {
            return;
        }

        list.add(root.val);
        // 左递归
        dfs(root.left, list);
        // 右递归
        dfs(root.right, list);
    }

    /**
     * 非递归
     */
    public static List<Integer> unRecursive(TreeNode root) {
        List<Integer> list = new ArrayList<>();
        Stack<TreeNode> stack = new Stack<>();

        if (root == null) {
            return list;
        }

        stack.push(root);

        while (!stack.isEmpty()) {
            // 弹栈
            TreeNode node = stack.pop();
            // 右子树先入栈
            if (node.right != null) {
                stack.push(node.right);
            }
            // 左子树后入栈
            if (node.left != null) {
                stack.push(node.left);
            }

            list.add(node.val);
        }

        return list;
    }

}

class TreeNode {
    int val;
    TreeNode left;
    TreeNode right;

    TreeNode(int val, TreeNode left, TreeNode right) {
        this.val = val;
        this.left = left;
        this.right = right;
    }

    TreeNode(int val) {
        this.val = val;
    }

    @Override
    public String toString() {
        return "TreeNode{" +
                "val=" + val +
                ", left=" + left +
                ", right=" + right +
                '}';
    }
}

2023华为OD机试真题【二叉树中和为某一值的路径】深度优先搜索(DFS)算法 描述:输入一颗二叉树的根节点roo和一个整数expectNumber,找出二叉树中结点值的和为expectNumber的所有路径。 1. 该题路径定义为从树的根结点开始往下一直到叶子结点所经过的结点 2. 叶子节点是指没有子节点的节点 3. 路径只能从父节点到子节点,不能从子节点到父节点 4. 总节点数目为n 阅读详情

相关推荐

【华为OD】| 查找树中元素_深度优先搜索 DFS

内容值为 10 的节点,有两个子节点,分别是 matrix[1]和 matrix[2],即[-21,3,4],[23,5].由于本。上面这句话的意思是,matrix[i] (是一个一维数组),我们用 arr = matrix[i],则 arr[0]表示节点。比如[10.1,2]表示。每个节点以一维数组 (int[]) 表示,所有节点信息构成二维数组 (int[][]),二维数组的 0 位置。每个节点以一维数组(int[])表示,所有节点信息构成二维数组(int[][]),二维数组的 0 位置存。

buff会技术的程序媛de博客 306

二叉树-深度遍历(DFS)和广度遍历(BFS)JAVA实现

二叉树-深度遍历(DFS)和广度遍历(BFS)JAVA实现

SALT的博客 1158

Topas——基于Geant4的放射治疗蒙特卡罗算法模拟工具

本文内容参考Joseph Perl 的线上会议,视频详情可见于,该视频会议内容主要介绍Topas功能、软件架构、工作流程、参数设定、物理模型、具体案例等,对TOPAS的基本入门使用方法以及使用规定作出阐述。

fy方的博客 7601

DFS深度优先搜索—Java版

精讲深度优先搜索,模板即是思想,用模板无难题!

Cheney的博客 2351

保姆级教程:用Python 3.10和Ollama在Windows上搞定LightRAG本地部署(附环境配置避坑指南)

本文提供了一份详细的Windows系统下LightRAG本地部署指南,涵盖Python 3.10环境配置、Ollama模型服务安装到LightRAG核心组件部署的全流程。特别针对Windows平台常见问题提供解决方案,帮助开发者快速搭建高效的检索增强生成(RAG)系统,实现专业领域知识的智能检索与整合。

weixin_28725407的博客 480

别再手动翻译PDF了!手把手教你用Zotero PDF Translate插件搞定外文文献(附最新GitHub下载链接)

本文详细介绍如何利用Zotero PDF Translate插件高效翻译外文文献,包括插件安装、配置及多引擎对比。通过划词翻译、段落翻译和全文翻译功能,显著提升科研工作效率,特别适合处理大量英文PDF文献的研究人员。

weixin_33712987的博客 771

32二叉树——DFS深度优先遍历

二叉树中的深度优先算法

Elaine2391的博客 358

Trae的付费之路还挺艰难,茫茫多的人想付付不了(附解决办法)

不得不说,Trae国际版这个付费其实整的挺复杂的,但没办法,毕竟有政策限制,付费成功后,你就是尊贵的Pro用户啦,使用Claude 4不排队还是挺爽的,而且600次其实不算少了,有一个小技巧,简单的问题就把模型切到Gemini-2.5-flag,因为使用这个模型是没有次数限制的。其次付费的时候有个ZIP Code,这东西也是个迷之存在,有的地区节点需要填,有的不需要,如果你选到了不需要填的节点,那很好,付费就行了,如果需要填,可以填一个51800试试。

cpp加油站的专栏 5877

二叉树广度优先搜索、深度优先搜索(前序、中序、后序)遍历,动图详解-Java/Kotlin双版本代码

二叉树广度优先搜索、深度优先搜索(前序、中序、后序)遍历,动图详解-Java/Kotlin双版本代码

Pumpkin's Blog 2456

《嵌入式最全面试题-Offer直通车》目录

嵌入式领域蓬勃发展,嵌入式工程师成为众多科技企业争抢的热门人才。如果你渴望在嵌入式面试中脱颖而出,成功斩获心仪的 offer,那么《嵌入式最全面试题 - Offer直通车》将是你的绝佳选择。本专栏是优快云是热门专栏,100多篇文章,总字数过百万。每月新增订阅用户过百,现在是优惠价9.9元,后面要逐渐恢复原价,早订阅早受益。本专栏精心整理了众多超万字的精华内容,总计达数十万字的嵌入式面试题总结。涵盖从嵌入式基础知识到各大厂面试真题,从驱动开发到操作系统,从硬件到软件等各个方面。

大模型大数据攻城狮的专栏 8384

Google Earth Engine 实现图像随机森林分类_遥感分类全流程详解

本文将通过一段完整的GEE代码,逐步讲解如何利用Sentinel-2影像和随机森林算法,实现地表覆盖分类。代码包含等关键步骤,适合遥感入门学习!

国科大硕士在读,分享Python/GEE/Matlab/R专业代码实践,涵盖数据分析、算法开发与应用技巧等,以代码会友。 916

Java:实现返回二叉树所有根到叶的路径算法(附带源码)

Java:实现返回二叉树所有根到叶的路径算法(附带源码)

欢迎来到我的博客!这里是一个专注于计算机技术的分享平台,涵盖编程开发、算法研究、系统架构、软件工程等多个领域。无论你是初学者还是资深开发者,都能在这里找到有价值的内容。 1349

使用Google Earth Engine(GEE)的Python API,您可以将经纬度坐标转换为Landsat影像的路径/行号

使用Google Earth Engine(GEE)的Python API,您可以将经纬度坐标转换为Landsat影像的路径/行号。在这个示例中,我们选择了一个位于加利福尼亚州旧金山市附近的点,其经度为-122.084,纬度为37.421998。首先,我们需要导入必要的库和模块。接下来,我们定义一个函数,该函数将接收经度和纬度作为输入,并返回对应的Landsat路径/行号。最后,我们提取路径和行号的值,并将它们作为结果返回。现在,我们可以使用这个函数来获取特定点的Landsat路径/行号。

VwajAlgorithm的博客 348

二叉树的广度优先搜索(BFS)和深度优先搜索(DFS)代码实现(Java)

本文的代码和图表来源于力扣(LeetCode) 作者:sdwwld 链接:https://leetcode-cn.com/problems/er-cha-shu-de-jing-xiang-lcof/solution/4chong-jie-jue-fang-shi-bfsdfszhong-xu-bian-li-di-/ 1 二叉树的广度优先搜索(BFS) 代码实现: public static void treeBFS(TreeNode root) { //如果为空直接返回 i

代码之美 833

基于matlab的主成分分析的人脸二维码识别系统

人脸识别因其在系统安全验证、信用验证、刑侦跟踪、身份管理、视频会议、人机交互、智能家居等方面的巨大应用前景,成为当前模式识别和人工智能领域越来越热门的一个研究方向。随着安全入口控制和二维码智能扫描应用需求的快速增长,基于二维码识别的生物人脸统计识别技术也引起了人们的重视。本案例将详细讲解基于主成分分析的人脸特征提取的原理与方法,并将其与 QR 二维码的编解码进行结合,将 MATLAB 作为工具平台,调用 QR 二维码编解码应用程序,进而实现一个人脸二维码自动识别的系统原型。

在职AI算法工程师,擅长计算机视觉,YOLO目标检测、分割等,擅长web、pyqt界面可视化,好内容持续更新中,来这里跟大家一起学习,共同进步 976

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

leetcode 深度优先搜索 二叉树的所有路径 java

题目描述 给定一个二叉树,返回所有从根节点到叶子节点的路径。 如果当前节点为空,直接返回 如果是叶子节点(即左右子树为空),则说明找到一条路径,则将其加入到res中 如果不是叶子节点,则继续分别遍历其左右子节点 代码: /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; * TreeNode right; * TreeNode(

stonney的博客 774

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

leetcode 深度优先搜索 二叉树的最小深度 Java

题目描述 给定一个二叉树,找出其最小深度。最小深度是从根节点到最近叶子节点的最短路径上的节点数量。 深度优先搜索: 如果是空节点,返回0 如果左右子树为空 返回1 如果左子树为空,则遍历右子树 如果右子树为空,则遍历左子树 如果左右子树都不为空,则选择左子树和右子树中较小深度的,并加1 /** * Definition for a binary tree node. * public class TreeNode { * int val; * TreeNode left; *

stonney的博客 633

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

java实现广度优先搜索(BFS)深度优先搜索(DFS)

如何用java实现对二叉树的DFS和BFS? 首先,一个简单二叉树如下图: 每一个结点的数据域为整型,有左节点和右节点 实现如下 import java.util.LinkedList; import java.util.Queue; import java.util.Stack; /** * @author WangMingMing * @creat 2020-04-10 7:58 *...

q_Q_wang的博客 529

[Java]Java实现二叉树和图的DFS、BFS

Java实现深度优先搜索DFS和广度优先搜索BFS

一杯糖不加咖啡 708

【leetcode刷题】25.二叉树的最大深度——Java版

已完成1/4

公号:一条coding 1万+

蓝桥杯 Java B 组之岛屿数量、二叉树路径和(区分DFS与回溯)

(Depth-First Search,DFS)是一种用于遍历或搜索树或图的算法。它会沿着树的分支向下深入,直到节点无法继续深入为止(即叶子节点),然后返回并访问未遍历的分支。

2301_77523055的博客 1247

(LeetCode 面试经典 150 题) 104. 二叉树的最大深度 (深度优先搜索dfs)

【代码】(LeetCode 面试经典 150 题) 104. 二叉树的最大深度 (深度优先搜索dfs)

记录一些刷过的题并分享学习心得 3788

(LeetCode 面试经典 150 题) 226. 翻转二叉树 (深度优先搜索dfs )

【代码】(LeetCode 面试经典 150 题) 226. 翻转二叉树 (深度优先搜索dfs )

记录一些刷过的题并分享学习心得 717

二叉树最大宽度 : 简单 DFS 运用题

给你一棵二叉树的根节点root,返回树的 最大宽度。树的 最大宽度 是所有层中最大的 宽度。每一层的 宽度 被定义为该层最左和最右的非空节点(即,两个端点)之间的长度。将这个二叉树视作与满二叉树结构相同,两端点间会出现一些延伸到这一层的null节点,这些null节点也计入长度。题目数据保证答案将会在32位 带符号整数范围内。...

weixin_62421895的博客 468

【leetcode113】【dfs】二叉树 路径总和||

题目 给定一个二叉树和一个目标和,找到所有从根节点到叶子节点路径总和等于给定目标和的路径。 说明: 叶子节点是指没有子节点的节点。 示例: 给定如下二叉树,以及目标和 sum = 22, 5 / \ 4 8 / / \ 11 13 4 / \ / \ 7 2 5 1 ...

qq_29295351的博客 164

Leetcode之深度优先搜索(DFS)专题-1123. 最深叶节点的最近公共祖先(Lowest Common Ancestor of Deepest Leaves)...

Leetcode之深度优先搜索(DFS)专题-1123. 最深叶节点的最近公共祖先(Lowest Common Ancestor of Deepest Leaves) 深度优先搜索的解题详细介绍,点击 给你一个有根节点的二叉树,找到它最深的叶节点的最近公共祖先。 回想一下: 叶节点是二叉树中没有子节点的节点 树的根节点的深度为0,如...

denghan1065的博客 235
上一篇: JUC高并发编程
下一篇: 二叉树广度优先搜索(BFS)- Java
hanlin-hl
博客等级 码龄8年 3粉丝 35原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hanlin-hl

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值