149.二叉树:二叉树的前序遍历(力扣)

代码解决

这段代码实现了二叉树的前序遍历,前序遍历的顺序是:访问根节点 -> 递归遍历左子树 -> 递归遍历右子树。以下是详细解释,包括各个部分的注释:

// 二叉树节点的定义
struct TreeNode {int val;                // 节点值TreeNode *left;         // 左子节点TreeNode *right;        // 右子节点TreeNode() : val(0), left(nullptr), right(nullptr) {}                      // 默认构造函数TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}                 // 带值的构造函数TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {} // 带值和左右子节点的构造函数
};class Solution {
public:// 递归遍历函数,用于前序遍历void traversal(TreeNode* tree, vector<int>& res){if(tree == NULL) return;            // 如果节点为空,则直接返回res.push_back(tree->val);           // 访问根节点,将节点值加入结果向量traversal(tree->left, res);         // 递归遍历左子树traversal(tree->right, res);        // 递归遍历右子树}// 前序遍历的主函数vector<int> preorderTraversal(TreeNode* root) {vector<int> result;                 // 存储遍历结果的向量traversal(root, result);            // 调用递归函数进行前序遍历return result;                      // 返回结果向量}
};

详细解释

  1. TreeNode 结构体

    • 定义了一个二叉树节点结构体TreeNode,包括节点的值val,左子节点指针left,和右子节点指针right
    • 提供了三种构造函数:
      • 默认构造函数初始化节点值为0,左右子节点为空。
      • 带一个整数参数的构造函数初始化节点值为给定值,左右子节点为空。
      • 带一个整数和两个子节点参数的构造函数初始化节点值和左右子节点。
  2. Solution 类

    • 包含前序遍历二叉树的实现。
  3. traversal 函数

    • 这是一个递归函数,用于执行前序遍历。
    • 参数tree是当前节点,res是存储遍历结果的向量。
    • 首先检查当前节点是否为空,如果为空,则返回。
    • 然后将当前节点的值加入结果向量。
    • 接下来递归遍历左子树和右子树。
  4. preorderTraversal 函数

    • 这是前序遍历的主函数。
    • 创建一个空的结果向量result
    • 调用递归函数traversal从根节点开始进行前序遍历。
    • 最后返回结果向量。

前序遍历的顺序

在前序遍历中,首先访问根节点,然后递归遍历左子树,最后递归遍历右子树。例如,给定以下二叉树:

使用场景

前序遍历常用于:

  • 复制二叉树
  • 计算二叉树节点的数量
  • 前序表达式的求值
  • 将二叉树转换为其他数据结构

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

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

相关文章

php -v在cmd中正常显示 在vscode中却报错

效果展示 原因 在vscode中 终端是 PowerShell PowerShell 默认情况下它不会继承系统的PATH环境变量 解决方案 使用CMD作为终端 打开VSCode设置&#xff08;File > Preferences > Settings 或 Ctrl,&#xff09;。搜索 terminal.integrated.shell.windows。更改其值…

springboot集成nacos

springboot集成nacos 1.版本2. POM依赖3. nacos服务3.1 下载nacos压缩包3.2 启动nacos 4. yaml配置5.Demo5.1 配置中心简单格式获取方式普通方式还可以再启动类上添加注解完成5.2 获取json格式的demo5.2 自动注册根据yaml配置 1.版本 nacos版本:2.3.2 springboot版本&#xff…

【已解决】使用StringUtils.hasLength参数输入空格仍然添加成功定价为负数仍然添加成功

Bug情景 今天在做功能测试时&#xff0c;发现使用使用StringUtils.hasLength&#xff08;&#xff09;方法以及定价为负数时&#xff0c;添加图书仍然成功 思考过程 0.1 当时在做参数检验时用了spring提供的StringUtils工具包&#xff0c;百度/大数据模型说&#xff1a; 0.2…

Redis:redis基础

Redis Remote Dictionary Service即远程字典服务 一个基于内存的key-value结构数据库,在开发中常常作为缓存存储不经常被改变的数据 基于内存存储,读写性能高 在企业中应用广泛 Redis介绍 用C语言开发的开源高性能键值对数据库,可以达到10w的qps,可以存储丰富的value类型…

【ubuntu20】--- 定时同步文件

在编程的艺术世界里&#xff0c;代码和灵感需要寻找到最佳的交融点&#xff0c;才能打造出令人为之惊叹的作品。而在这座秋知叶i博客的殿堂里&#xff0c;我们将共同追寻这种完美结合&#xff0c;为未来的世界留下属于我们的独特印记。 【Linux命令】--- 多核压缩命令大全&…

肉类食品解冻污水处理设备功能特点

诸城市鑫淼环保小编带大家了解一下肉类食品解冻污水处理设备功能特点 肉类食品解冻污水处理设备是专门用于处理肉类加工过程中产生的解冻废水的设备。这些设备在保障肉类食品生产过程中的卫生安全同时&#xff0c;也有效处理了废水&#xff0c;避免了环境污染。以下是对肉类食品…

VM虚拟机共享文件夹fuse: bad mount point `/mnt/hgfs‘: No such file or directory

报错显示挂载点 /mnt/hgfs 不存在&#xff0c;你需要先创建这个目录。可以按照以下步骤进行操作&#xff1a; 创建挂载点目录&#xff1a; sudo mkdir -p /mnt/hgfs 手动挂载共享文件夹&#xff1a; sudo vmhgfs-fuse .host:/ /mnt/hgfs -o allow_other 确保每次启动时自动…

液氮罐内部会污染吗

液氮罐是一种常见的存储液态氮的设备&#xff0c;广泛应用于科研、生物医药、食品冷冻等领域。但是&#xff0c;人们对于液氮罐内部是否会产生污染一直存在疑问。 我们来看液氮罐内部可能的污染源。液氮罐内部主要存在以下几种潜在的污染来源&#xff1a;气体污染、杂质污染、…

C++ | Leetcode C++题解之第117题填充每个节点的下一个右侧节点指针II

题目&#xff1a; 题解&#xff1a; class Solution { public:void handle(Node* &last, Node* &p, Node* &nextStart) {if (last) {last->next p;} if (!nextStart) {nextStart p;}last p;}Node* connect(Node* root) {if (!root) {return nullptr;}Node *…

推券客CMS淘宝优惠券网站源码

推券客CMS淘宝优惠券网站源码是一个以PHPMySQL进行开发的PHP淘宝客优惠券网站。支持电脑站、手机站以及微信公众号查券。支持多级代理返利和阿里妈妈最新的渠道管理等功能。 五大优势 一、全开源 推券客cms网站程序数据库完全开源,目前市场上基本都是以下2种淘宝客系统 第一…

LeetCode - 双指针(Two Pointers) 算法集合 [对撞指针、快慢指针、滑动窗口、双链遍历]

欢迎关注我的CSDN&#xff1a;https://spike.blog.csdn.net/ 本文地址&#xff1a;https://spike.blog.csdn.net/article/details/139270999 双指针算法是一种常见且灵活的技巧&#xff0c;通过使用两个指针协同完成任务。这些指针可以指向不同的元素&#xff0c;具体应用取决于…

Java中的异常处理策略:编写健壮的软件

异常处理是Java编程中一个重要的方面&#xff0c;正确的异常处理策略可以使软件更加健壮和易于维护。本文将详细探讨Java中的异常处理机制&#xff0c;介绍常见的异常类&#xff0c;以及提供有效的异常处理技巧和最佳实践。 #### 1. Java异常类别 Java中的异常分为两大类&…

Clickhouse 字符串函数使用总结—— Clickhouse基础篇(七)

文章目录 判空非空判断字符串长度左补齐字符串右补齐字符串字符串转小写字符串转大写重复字符串拼接字符串函数计算子串base64编码base64解码判断开头字符串判断结尾字符串删除空白字符从HTML提取纯文本字符串部分替换字符串全部替换字符串正则部分替换字符串正则全部替换计算子…

Spring Boot 与 OpenJ9 的 Docker 集成:提升 Java 应用性能的新选择

## 引言 随着 Docker 的普及&#xff0c;越来越多的开发者开始使用 Docker 来部署和管理他们的应用。在这种趋势下&#xff0c;将 Spring Boot 与 OpenJ9 结合使用&#xff0c;可以为 Java 应用带来更高的性能和更低的资源占用。本文将介绍如何在 Docker 环境中使用 Spring Bo…

回顾封装、继承和多态的概念,并给出相关示例

封装、继承和多态是面向对象编程&#xff08;OOP&#xff09;的三个核心概念。下面我将分别解释这些概念&#xff0c;并给出相应的示例。 封装 概念&#xff1a;封装是将数据&#xff08;变量&#xff09;和操作数据的方法&#xff08;函数&#xff09;组合到一个类中&#x…

pytest断言与Selenium模拟操作的规划案例

pytest断言与Selenium模拟操作的规划案例 在使用pytest进行自动化测试时&#xff0c;断言是验证测试结果是否符合预期的关键步骤。pytest提供了简洁的断言语法&#xff0c;使得编写测试用例更加直观和易于维护。以下是一个简单的规划案例&#xff0c;展示了如何在pytest中使用…

202309青少年软件编程(Python)等级考试试卷(四级)

第 1 题 【单选题】 用枚举算法求解“100 以内既能被 3 整除又能被 4 整除的元素”时, 在下列数值范围内,算法执行效率最高的是? ( ) A :1~101 B :4~100 C :12~100 D :12~96 正确答案:D 试题解析: 在选取循环控制变量时, 枚举范围应尽可能小, 但又不能遗漏。 第 …

掌握Python循环:从基础到应用的完整指南

循环语句是编程中常用的一种结构&#xff0c;用于重复执行特定的代码块。Python3 提供了几种类型的循环语句&#xff0c;包括for循环和while循环。接下来&#xff0c;我会详细解释循环语句的基本语法、常用命令、示例、应用场景、注意事项和总结。 基本语法 for 循环 for 变…

什么是勒索软件

什么是勒索软件 勒索软件又称勒索病毒&#xff0c;是一种特殊的恶意软件&#xff0c;又被归类为“阻断访问式攻击”&#xff08;denial-of-access attack&#xff09;&#xff0c;与其他病毒最大的不同在于攻击手法以及中毒方式。勒索软件的攻击方式是将受害者的电脑锁起来或者…

mysql-增量备份流程详细流程

3.增量备份流程 原理&#xff1a;每次备份上一次备份到现在产生的新数据 1.在数据库上面创建一个测试的库 增量备份流程&#xff08;重要) 增量备份跟上一次相比 我增加了啥--incremental //放到何处 --incremental-basedir //上一级//第一次增量备份 innobackupex --user…