二叉树的深度优先遍历(前中后)

news2025/1/4 19:49:22

1. 前序遍历

前序遍历是先输出根节点,再输出左子树,最后输出右子树。

2. 中序遍历

中序遍历,左子树,根节点,右子树

3. 后序遍历

左子树,右子树,根节点

4. 代码实现(递归形式)

下面是Java代码示例,分别实现了这三种遍历方式:

// 定义二叉树节点  
class TreeNode {  
    int val;  
    TreeNode left;  
    TreeNode right;  
  
    TreeNode(int x) {  
        val = x;  
    }  
}  
  
public class BinaryTreeTraversal {  
  
    // 前序遍历(根-左-右)  
    public void preorderTraversalRecursive(TreeNode root) {  
        if (root == null) {  
            return;  
        }  
        // 访问根节点  
        System.out.print(root.val + " ");  
        // 递归遍历左子树  
        preorderTraversalRecursive(root.left);  
        // 递归遍历右子树  
        preorderTraversalRecursive(root.right);  
    }  
  
    // 中序遍历(左-根-右)  
    public void inorderTraversalRecursive(TreeNode root) {  
        if (root == null) {  
            return;  
        }  
        // 递归遍历左子树  
        inorderTraversalRecursive(root.left);  
        // 访问根节点  
        System.out.print(root.val + " ");  
        // 递归遍历右子树  
        inorderTraversalRecursive(root.right);  
    }  
  
    // 后序遍历(左-右-根)  
    public void postorderTraversalRecursive(TreeNode root) {  
        if (root == null) {  
            return;  
        }  
        // 递归遍历左子树  
        postorderTraversalRecursive(root.left);  
        // 递归遍历右子树  
        postorderTraversalRecursive(root.right);  
        // 访问根节点  
        System.out.print(root.val + " ");  
    }  
  
    // 主函数,用于测试  
    public static void main(String[] args) {  
        // 构建一个简单的二叉树  
        TreeNode root = new TreeNode(1);  
        root.left = new TreeNode(2);  
        root.right = new TreeNode(3);  
        root.left.left = new TreeNode(4);  
        root.left.right = new TreeNode(5);  
  
        BinaryTreeTraversal traversal = new BinaryTreeTraversal();  
  
        System.out.println("前序遍历结果:");  
        traversal.preorderTraversalRecursive(root); // 输出: 1 2 4 5 3  
  
        System.out.println("\n中序遍历结果:");  
        traversal.inorderTraversalRecursive(root); // 输出: 4 2 5 1 3  
  
        System.out.println("\n后序遍历结果:");  
        traversal.postorderTraversalRecursive(root); // 输出: 4 5 2 3 1  
    }  
}

在上面的代码中,我们定义了preorderTraversalRecursive、inorderTraversalRecursive和postorderTraversalRecursive三个方法,分别用于前序、中序和后序遍历。每个方法都接收一个TreeNode类型的参数root,表示当前遍历的节点。

对于前序遍历,我们先访问根节点,然后递归遍历左子树,最后递归遍历右子树。

对于中序遍历,我们先递归遍历左子树,然后访问根节点,最后递归遍历右子树。

对于后序遍历,我们先递归遍历左子树,然后递归遍历右子树,最后访问根节点。

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

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

相关文章

Vulnhub:BROKEN: GALLERY

目录 信息收集 1、arp 2、nmap 3、nikto 4、whatweb WEB wen信息收集 目录扫描 进制转换 ssh登录 提权 信息收集 1、arp ┌──(root㉿ru)-[~/kali/vulnhub] └─# arp-scan -l Interface: eth0, type: EN10MB, M…

向量点乘有哪些作用呢

如下: 1.找到两个向量之间的夹角(不用多说) 2.求一个向量投影在另一个向量的投影: 我们把图中b的在a上的投影向量称作b1吧,因为b1就在a上,所以只需要求出b1的大小,然后乘以a的单位向量,我们就得到向量b1了…

Bezier曲线

1. 实验要求 2. Bezier曲线的原理 以及 公式推导 参考贝塞尔曲线(Bezier Curve)原理及公式推导_bezier曲线-CSDN博客 Bezier曲线的一些特性: 使用n个控制点来控制曲线形状 曲线通过起始点和终止点,接近但不通过中间点 2.1 直观…

结构化绑定optional(C++基础)

结构化绑定 处理多个返回值的操作&#xff1a;C17提出 之前多返回值喜欢用struct来返回。现在会做成元组&#xff0c;下图中设置C17的版本&#xff0c;不要设置错为C语言标准。 #include<iostream> #include<string> #include<tuple> std::pair<std::st…

ubuntu下给不同串口设置别名

目录 一、绑定设备ID 1.查看设备ID 2.编写usev规则 3.重新加载usev规则 4.查看 二、绑定USB端口号 1.先插入一个串口&#xff0c;查看USB设备信息 2.查看USB转串口信息 3.编写usev规则 4.重新加载usev规则 5.查看 在Ubuntu环境下&#xff0c;有时候工控机或者arm开…

新增收货地址

目录 &#x1f9c2;1.创建controller层 &#x1f953;2.创建service层 &#x1f32d;3.注意细节 &#x1f37f;4.避免dao数据暴漏 1.创建controller层 controller不做逻辑操作&#xff0c;只接受前端的数据 1.添加Api设置swagger模块名称2.RestController以json形式返回…

CAJViewer8.1下载地址及安装教程

CAJViewer是中国学术期刊&#xff08;CAJ&#xff09;全文数据库的专用阅读软件。CAJViewer是中国知识资源总库&#xff08;CNKI&#xff09;开发的一款软件&#xff0c;旨在方便用户在线阅读和下载CAJ数据库中的学术论文、期刊和会议论文等文献资源。 CAJViewer具有直观的界面…

2000-2021年各省技术市场发展水平数据(原始数据+计算结果)

2000-2021年各省技术市场发展水平数据&#xff08;原始数据计算结果&#xff09; 1、时间&#xff1a;2000-2021年 2、来源&#xff1a;国家统计局、统计年鉴 3、范围&#xff1a;30省 4、指标&#xff1a;技术市场成交额、国内生产总值、技术市场发展水平 5、计算说明“技…

java字符串(一)-- 字符串API,StringBuffer 和 StringBuilder,Object

String字符串相关的类 String的特性 String类&#xff1a;代表字符串。Java 程序中的所有字符串字面值&#xff08;如"abc" &#xff09;都作为此类的实例实现。String类是引用数据类型。 在 Java 8 中&#xff0c;String 内部使用 char 数组存储数据。 public fi…

C++的入门学习

✨✨✨学习的道路很枯燥&#xff0c;希望我们能并肩走下来! 文章目录 目录 文章目录 前言 一、C关键字(C98) 二、命名空间 2.1 引入 ​编辑2.2 命名空间定义 2.3 命名空间的使用 三. C输入&输出 四.缺省参数 4.1 缺省参数概念 4.2 缺省参数分类 1.全缺省参数 2…

MCGS学习——水位控制

要求 插入一个水罐&#xff0c;液位最大值为37插入一个滑动输入器&#xff0c;用来调节水罐水位&#xff0c;滑动输入器最大调节为液位最大值&#xff0c;并能清楚的显示出液位情况用仪表显示水位变化情况&#xff0c;仪表最大显示设置直观清楚方便读数&#xff0c;主划线为小…

基于spark的大数据分析预测地震受灾情况的系统设计

基于spark的大数据分析预测地震受灾情况的系统设计 在本篇博客中,我们将介绍如何使用Apache Spark框架进行地震受灾情况的预测。我们将结合数据分析、特征工程、模型训练和评估等步骤,最终建立一个预测模型来预测地震造成的破坏程度,同时使用可视化大屏的方式展示数据的分布…

提升 RAG 效果的实践

提升 RAG 效果的实践 0. 引言1. 测试数据2. cohere/embed-multilingual-v3.0 的几组测试结果2-1. 第1组测试2-2. 第2组测试 3. BAAI/bge-m3 的几组测试结果3-1. 第1组测试 0. 引言 AI 大语言模型的主要应用方式之一就是 RAG&#xff0c;接下来计划陆续分享工作中提升 RAG 效果…

vue3封装Element表格

配置表头配置多选配置序号自定义操作列按钮 封装表格 Table.vue <template><el-table:data"tableData"width"100%":maxHeight"maxHeight"v-bind"$attrs"selection-change"handleSelectChange"row-click"hand…

考研数学|听完一遍汤家凤基础,1800都没思路,怎么办?

看了我这篇回答&#xff0c;保证你可以顺利的做1800题&#xff01; 如果你听了汤家凤老师的课&#xff0c;但是做题没思路&#xff0c;请不要担心&#xff0c;也不要急着换老师&#xff0c;你很有可能是方法错了。 请你反思一下&#xff1a; 1、你是不是听完课立刻就去做题。…

linux系统基础命令

1、Linux中文件的权限包括哪些&#xff1f;某个文件的权限列为644代表该文件属主、属组和其它用户分别有什么权限&#xff1f; 1&#xff09;Linux中文件的权限包括哪些&#xff1f; 在Linux系统中&#xff0c;文件的权限包括读取&#xff08;r&#xff09;、写入&#xff08;w…

ARP类型

地址解析协议ARP即可实现将IP地址解析为MAC地址 动态ARP 动态ARP表项由ARP协议通过ARP报文自动生成和维护&#xff0c;可以被老化&#xff0c;可以被新的ARP报文更新&#xff0c;也可以被静态ARP表项覆盖。 动态ARP适用于拓扑结构复杂、通信实时性要求高的网络。 静态ARP …

C刊级 | Matlab实现DBO-BiTCN-BiGRU-Attention蜣螂算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测

C刊级 | Matlab实现DBO-BiTCN-BiGRU-Attention蜣螂算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测 目录 C刊级 | Matlab实现DBO-BiTCN-BiGRU-Attention蜣螂算法优化双向时间卷积双向门控循环单元融合注意力机制多变量回归预测效果一览基本介绍模型描述程序…

(React组件基础)前端八股文Day6

一 类组件与函数组件有什么异同 在React中&#xff0c;类组件和函数组件是创建组件的两种主要方式。随着React的发展&#xff0c;尤其是自Hooks在React 16.8中引入以来&#xff0c;函数组件的功能变得更加强大&#xff0c;使得它们能够更加方便地与类组件相竞争。下面是类组件…

雷卯有1.8V的ESD供您选择

一&#xff0e;雷卯有1.8V的ESD供您选择&#xff0c;如下是型号&#xff0c;体积小。 二. 为什么要用低压1.8V 做静电保护呢 省电&#xff0c;省电&#xff01; 1.8V的电压&#xff0c;内阻也小的话&#xff0c;那就是非常省电的电路。现在很多产品号称10年不用换电池。电池技…