二叉树 | 二叉树的前序遍历问题

二叉树的前序遍历问题描述

提供二叉树的根节点 root ,返回它节点值的 前序 遍历。

二叉树的前序遍历是一种深度优先遍历(DFS)的方式,其遍历顺序为:先访问根节点,然后递归地对左子树进行前序遍历,最后递归地对右子树进行前序遍历。

二叉树的定义

在Java中,二叉树的定义可以通过一个类表示。以下是一个简单的二叉树节点类的定义:

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

使用这个定义,可以构建任意形状的二叉树,例如:

/** 示例二叉树:*      1*     / \*    2   3*   / \*  4   5*/
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);

这样,通过创建不同的TreeNode实例,并连接它们的leftright引用,可以构建出具体的二叉树结构。

前序遍历的过程

前序遍历的过程是递归的。假设我们有一个二叉树:

     1/ \2   3/ \4   5

前序遍历的顺序是:1 -> 2 -> 4 -> 5 -> 3

具体步骤如下:

  1. 访问根节点: 从根节点开始,首先访问根节点的值。

  2. 递归遍历左子树: 对根节点的左子树进行前序遍历,重复步骤1。

  3. 递归遍历右子树: 对根节点的右子树进行前序遍历,重复步骤1。

 

整个遍历的顺序是根节点 -> 左子树 -> 右子树。这个过程是递归的,因为对左子树和右子树的遍历过程本质上也是一个前序遍历。

前序遍历的代码实现

import java.util.ArrayList;
import java.util.List;public class BinaryTreePreorderTraversal {public List<Integer> preorderTraversal(TreeNode root) {List<Integer> result = new ArrayList<>();preorder(root, result);return result;}private void preorder(TreeNode node, List<Integer> result) {if (node == null) {return;}// 1. 访问根节点result.add(node.val);// 2. 递归左子树preorder(node.left, result);// 3. 递归右子树preorder(node.right, result);}// 示例public static void main(String[] args) {/** 示例二叉树:*      1*     / \*    2   3*   / \*  4   5*/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);BinaryTreePreorderTraversal solution = new BinaryTreePreorderTraversal();List<Integer> result = solution.preorderTraversal(root);System.out.println(result);  // 输出: [1, 2, 4, 5, 3]}
}

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

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

相关文章

led恒流式驱动电源芯片一览表

LED恒流式驱动电源芯片是一种用于驱动LED灯的关键组件。它能够稳定地提供恒定的电流&#xff0c;确保LED灯的亮度和颜色始终保持一致。 LED恒流式驱动电源芯片通常由电源管理单元、恒流输出部分和保护电路组成。电源管理单元负责转换输入电压为恒定的直流电压&#xff0c;并通…

App Crawler

Google官方出了一款App遍历工具App Crawler。 文档&#xff1a;应用抓取工具 | Android 开发者 | Android Developers App Crawler工具是Android Jetpack的一部分&#xff0c;它可自动的运行你的App&#xff0c;不需要编写或维护任何代码。 通过App Crawler运行App&…

Serverless与Kubernetes(K8s)的区别、优缺点及应用场景

Serverless与Kubernetes&#xff08;K8s&#xff09;的区别 架构模型 Serverless是一种基于事件驱动的计算模型&#xff0c;它允许开发者编写应用程序时无需关心底层的基础设施。在Serverless架构中&#xff0c;云服务提供商会负责管理服务器、操作系统、运行时环境等基础设施&…

数字后端设计实现之自动化useful skew技术(Concurrent Clock Data)

在数字IC后端设计实现过程中&#xff0c;我们一直强调做时钟树综合要把clock skew做到最小。原因是clock skew的存在对整体设计的timing是不利的。 但是具体到某些timing path&#xff0c;可能它的local clock skew对timing是有帮助的&#xff0c;比如如下图所示。 第一级FF到第…

简单易懂的PyTorch激活函数大全详解

目录 torch.nn子模块Non-linear Activations nn.ELU 主要特点与注意事项 使用方法与技巧 示例代码 图示 nn.Hardshrink Hardshrink函数定义 参数 形状 示例代码 图示 nn.Hardsigmoid Hardsigmoid函数定义 参数 形状 示例代码 图示 nn.Hardtanh HardTanh函数…

记一个常用的时间、日期 格式化方法

方法里可能有其他的逻辑&#xff0c;我没有删去多余的 &#xff0c;仅供参考 1、对日期进行格式化 /*** 对日期进行格式化&#xff0c; 和C#大致一致 默认yyyy-MM-dd HH:mm:ss* 可不带参数 一个日期参数 或一个格式化参数* param date 要格式化的日期* param format 进行格式化…

【FLV】记录 H.264的解析

参考 FLV 文件格式分析 知乎大神的FLV文件格式分析。 FLV 首先下发9个字节的FLV 头 -2024-01-08 11:38:29.698 INFO [32196] [evplayer_client_main@153] player clinet run … 2024-01-08 11:38:29.702 INFO [2276] [evplayer_client_main::<lambda_1>::operator ()@14…

windows系统升级

问题 windows系统升级 详细问题 笔者手边有台电脑&#xff0c;操作系统版本为windowsXP&#xff0c;现需要升级至windows较新版本 解决方案 1、 内容备份 若C盘有重要数据文件 &#xff0c;对于C盘&#xff08;重要数据文件&#xff09;进行备份 2、下载软件天猫一键重装…

【HBase】——整合Phoenix

1 概述 Phoenix 是 HBase 的开源 SQL 皮肤。可以使用标准 JDBC API 代替 HBase 客户端 API 来创建表&#xff0c;插入数据和查询 HBase 数据。   Phoenix 在 5.0 版本默认提供有两种客户端使用&#xff08;瘦客户端和胖客户端&#xff09;&#xff0c;在 5.1.2 版本 安装包中…

【数据结构】数据结构中应用题大全(完结)

自己在学习过程中总结了DS中几乎所有的应用题&#xff0c;可以用于速通期末考/考研/各种考试。很多方法来源于B站大佬&#xff0c;底层原理本文不做过多介绍&#xff0c;建议自己研究。例题大部分选自紫皮严书。pdf版在主页资源 一、递归时间/空间分析 1.时间复杂度的分析 设…

sqlachemy orm create or delete table

from sqlalchemy import create_engine from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, Integer, String, DateTime ​ ​ Base declarative_base() engine create_engine(mysqlpymysql://root:123456localhost:3306/test?char…

MySQL之子查询、连接查询(内外)以及分页查询(实操)

文章目录 前言一、SQL脚本二、实操以及实现思路 前言 续上篇博主MySQL之视图&索引&执行计划这篇给大家讲解MySQL之子查询、连接查询(内&外)以及分页查询 一、SQL脚本 /*Navicat Premium Data TransferSource Server : localhostSource Server Type :…

Koodo Reader : 一个开源免费的电子书阅读器

今天在浏览 GitHub 的时候&#xff0c;偶然发现了一个非常有趣的开源项目——Koodo Reader。这个项目是一款开源免费的电子书阅读器&#xff0c;支持多种格式。它具有一些非常独特的功能&#xff0c;深深地吸引了我的注意。在接下来的内容中&#xff0c;我将为大家详细介绍一下…

站长工具之PHP单文件实现IP归属地批量查询

站长/程序员工具之PHP单程序文件实现IP归属地批量查询 支持提取IP便于直接粘贴日志&#xff0c;去重防止重复查询浪费计算资源 按出现次数排序方便分析该IP行为。查询速度极快。 <?php //整理与分享&#xff1a;yujianyue<15058593138qq.com> //注意还得放纯真IP数…

07、Kafka ------ 消息生产者(演示 发送消息) 和 消息消费者(演示 监听消息)

目录 Kafka --- 消息生产者★ 消息★ 消息的分发机制★ 分发到哪个分区★ 轮询策略&#xff08;round-robin&#xff09;★ 使用命令行工具发送消息演示添加消息 Kafka --- 消息消费者★ 消息消费者命令▲ 监听 【指定主题】 的所有消息:▲ 监听 【指定主题、指定分区】的所有消…

华为OD机试 - 启动多任务排序(Java JS Python C)

题目描述 一个应用启动时,会有多个初始化任务需要执行,并且任务之间有依赖关系,例如A任务依赖B任务,那么必须在B任务执行完成之后,才能开始执行A任务。 现在给出多条任务依赖关系的规则,请输入任务的顺序执行序列,规则采用贪婪策略,即一个任务如果没有依赖的任务,则…

LED电平显示驱动电路图

LB1409九位LED电平显示驱动电路 如图所示为LBl409九位LED电平显示驱动电路。图&#xff08;a&#xff09;是用LB1409做电平显示驱动电路&#xff0c;图&#xff08;b&#xff09;是应用基准电压电平显示驱动电路。LB1409是日本东京互洋电机株式会社生产的产品&#xff0c;与其…

开启Android学习之旅-5-Activity全屏

Android 两种方式设置全屏&#xff1a; 1. 第一行代码中的方法 通过 getWindow().getDecorView()方法拿到当前Activity的DecorView,再调用 setSystemUiVisibility() 方法来改变系统UI的显示&#xff0c;这里传入了 View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN 和 View.SYSTEM_UI_…

Adams许可管理安全控制策略

随着全球信息化的快速发展&#xff0c;信息安全和许可管理问题日益凸显。在这场无形的挑战中&#xff0c;Adams许可管理安全控制策略以其卓越的性能和可靠性&#xff0c;引领着解决这类问题的新潮流。 Adams许可管理安全控制策略是一种全方位、多层次的安全控制方案&#xff0…

线程通信:实现多线程协同

线程通信&#xff1a;实现多线程协同 大家好&#xff0c;我是免费搭建查券返利机器人赚佣金就用微赚淘客系统3.0的小编&#xff0c;也是冬天不穿秋裤&#xff0c;天冷也要风度的程序猿&#xff01;今天&#xff0c;让我们一同深入探讨在多线程编程中至关重要的话题——“线程通…