二叉树深度优先搜索(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

科研人必备!用WisPaper搭建个人文献知识库的完整指南(附Zotero联动技巧)

本文详细介绍了如何利用WisPaper搭建高效的个人文献知识库,包括文件命名标准化、文件夹结构设计、语义搜索技巧及与Zotero的深度联动方法。通过智能标签系统和知识图谱功能,科研人员可以快速定位关键文献,提升研究效率。特别适合需要管理大量学术文献的研究者。

weixin_30823001的博客 266

DFS深度优先搜索—Java版

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

Cheney的博客 2351

Aurora8b10b光口通信实战:复位时序与IP核配置详解

本文深入解析了Aurora 8B10B协议在FPGA高速光口通信中的核心实践,重点剖析了确保链路稳定启动的关键复位时序与IP核配置细节。通过详解全双工与单工模式下的复位流程、Vivado中IP核的物理层与链路层参数设置,并结合用户逻辑设计实例,为工程师实现可靠的高速数据传输提供了清晰的实战指南。

weixin_29280219的博客 177

UE4 Instanced Mesh 半透明渲染顺序不对解决

以绿色方块为Instanced Mesh为例。 正确的半透应该是这样的: 这是一般蓝图Actor方块,其半透是正常的。 然而Instanced Mesh因为过多,UE4不给你缓存正确的渲染顺序。所以,在不改代码的情况下,想解决Instanced Mesh半透问题,是不可能的。不正确的半透如下: 注意到错误发生在Instanced Mesh的方块与方块之间。 但我就是要解决,...

qq_41524721的博客 5569

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

二叉树中的深度优先算法

Elaine2391的博客 358

Flink实战(101):双流join(三)双流中实现Inner Join、Left Join与Right Join

声明:本系列博客是根据SGG的视频整理而成,非常适合大家入门学习。 《2021年最新版大数据面试题全面开启更新》 简介 之前文章中提到JoinedStream与CoGroupedStream,例如下列代码: dataStream.join(otherStream) .where(0).equalTo(1) .window(TumblingEventTimeWindows.of(Time.seconds(3))) .apply { ... } 由于joinedStream与

微信搜:import_bigdata,大数据领域硬核原创作者 736

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

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

Pumpkin's Blog 2456

【如何学习CAN总线测试】——AUTOSAR网络管理自动化测试(CAPL源码)

上一章介绍的是AUTOSAR网络管理如何测试、用例设计,对于不满足手工测试的同学,本章就介绍AUTOSAR网络管理自动化测试。

测试领域技术分享 6235

两组相机(或三维点)对齐方法介绍及实现代码(求解相似变换,包含旋转R、平移t、尺度s)

  这个变换用于将生成的稀疏重建场景对齐到真值上。由于SfM(Structure from Motion,运动恢复结构)求解的结果是尺度未定的,所以重建场景与真值之间不仅会相差一个旋转与平移,还会存在尺度缩放。待求解的问题可以描述为:已知一组相机(个数为m)的位姿真值Rgt、tgt和预测位姿Rpred、tpred,现要将预测值对齐到真值上。它们之间会相差一个相似变换Msimilarity,包括尺度s、旋转量R、平移量t,可以根据如下步骤进行求解:    1 求解旋转R   首先计算所有m个相机的位姿差异总和

zeeq的博客 3926

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

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

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

K8S部署Java项目 pod的logs报错为:Error: Unable to access jarfile app.jar

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 2600

二叉树的广度优先搜索(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

【实战圣经】YOLOv8-pose姿态估计模型从训练到RK3588部署:让边缘端骨骼识别速度突破60FPS

本教程从“模型训练-转换-边缘部署”全链路拆解了YOLOv8-pose姿态估计方案在RK3588上的落地过程,每一步都经过实战验证。无论是智能健身的动作实时纠正,还是工业设备的关键部件姿态检测,这套流程都能让你以最低成本实现高精度、高实时性的姿态估计应用。如果你在实践中遇到模型转换报错、部署性能不达标等问题,可聚焦某一环节深入优化——毕竟,让AI在边缘端“精准捕捉每一个关键点”,才是技术驱动场景创新的核心。

m0_71589036的博客 251

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

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

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

stonney的博客 774

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

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

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

stonney的博客 633

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

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、付费专栏及课程。

余额充值