Leetcode 二叉树中根遍历

news2024/9/19 10:43:36

在这里插入图片描述

采用递归算法,并且用一个向量来存储节点值。

算法C++代码如下:

/**
 * Definition for a binary tree node.
 * 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 inorderTraversalHelper(TreeNode* root, vector<int>& result) {
        if(!root) return;
        inorderTraversalHelper(root->left, result); //遍历左子树
        result.push_back(root->val); //访问中根节点
        inorderTraversalHelper(root->right, result); //遍历右子树 
    }
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> result;
        inorderTraversalHelper(root, result);
        return result;
    }
};

关于二叉树的定义

这个部分定义的是二叉树节点 TreeNode 的构造函数(constructor)。在 C++ 中,构造函数用于初始化类的对象,即在创建对象时给它的成员变量赋初值。

详细解释:

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) {}
};
1. TreeNode() : val(0), left(nullptr), right(nullptr) {}

这是无参构造函数,即创建节点时如果没有提供初始值,将使用默认值初始化成员变量:

  • val(0):将节点的值 val 初始化为 0。
  • left(nullptr):将左子节点指针 left 初始化为 nullptr,表示该节点暂时没有左子节点。
  • right(nullptr):将右子节点指针 right 初始化为 nullptr,表示该节点暂时没有右子节点。
2. TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}

这是带一个参数的构造函数,在创建节点时可以提供一个整数 x 作为节点的值 val。其余成员变量的初始化:

  • val(x):将节点的值 val 初始化为 x,即创建节点时用 x 作为它的值。
  • left(nullptr):左子节点指针 left 被初始化为 nullptr,表示没有左子节点。
  • right(nullptr):右子节点指针 right 被初始化为 nullptr,表示没有右子节点。
3. TreeNode(int x, TreeNode *left, TreeNode *right) : val(x), left(left), right(right) {}

这是带三个参数的构造函数,可以在创建节点时同时指定节点的值 val 和它的左右子节点:

  • val(x):将节点的值 val 初始化为 x
  • left(left):将左子节点指针 left 初始化为传入的 left 指针,这个指针指向另一个 TreeNode 节点。
  • right(right):将右子节点指针 right 初始化为传入的 right 指针,同样指向另一个 TreeNode 节点。

总结:

  • 第一个构造函数是无参的,它默认创建一个值为 0 的节点,没有子节点。
  • 第二个构造函数允许创建一个带有值的节点,但没有子节点。
  • 第三个构造函数允许创建一个带有值的节点,并且可以指定其左右子节点。

使用示例:

  1. 无参构造函数:
TreeNode node;  // 创建一个值为0的节点,左右子节点都是nullptr
  1. 带一个参数的构造函数:
TreeNode node(5);  // 创建一个值为5的节点,左右子节点都是nullptr
  1. 带三个参数的构造函数:
TreeNode leftNode(2);  // 创建左子节点,值为2
TreeNode rightNode(3);  // 创建右子节点,值为3
TreeNode root(1, &leftNode, &rightNode);  // 创建根节点,值为1,左子节点是leftNode,右子节点是rightNode

在第三个例子中,root 是一个二叉树的根节点,它的左子节点是 leftNode,右子节点是 rightNode,构成了一个简单的二叉树。

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

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

相关文章

GLSL 棋盘shader

今日永杰开金 float size 100.;vec2 checkerboard mod(floor(gl_FragCoord.xy / size), 2.);float c mod(checkerboard.x checkerboard.y, 2.);gl_FragColor vec4(vec3(c), 1);或 vec2 uv floor(S * p.xy * vec2(iResolution.x / iResolution.y, 1) / iResolution.xy); …

文件的常用操作

目录 一、文件的常用操作 1、创建文件 2、读文件 3、写文件 4、删除文件 一、文件的常用操作 1、创建文件 需求&#xff1a;在d盘的a目录下创建hi.txt文件&#xff0c;a目录已经创建好 # 需求&#xff1a;在d盘的a目录下创建hi.txt文件&#xff0c;a目录已经创建好 &qu…

RuoYi-Vue3使用minio图片预览不了的问题

参照官网配置好之后&#xff0c;图片预览不了 1、参照官网修改前端src\components\ImageUpload\index.vue 2、如果图片预览不了&#xff0c;发现是Minio后台返回的url地址内部包括逗号 与代码里split(",")冲突了&#xff0c; 解决方法是改成分号 多个图片可以预览了…

重大消息!LLMWorld 推出开源应用广场,100 多个前沿 AI 应用引关注

宝藏网站LLM World 上线了开源应用广场&#xff0c;汇聚了 100 多个前沿的 AI 应用。 开源应用的出现降低了技术门槛&#xff0c;无论是专业开发者还是普通爱好者&#xff0c;都能在此轻松接触先进的人工智能技术&#xff0c;进行学习和实践。 期待 LLMWorld 能持续汇聚更多优…

在Linux系统中如何创建一个新用户

在Linux系统下创建一个新用户既可以用图形桌面系统&#xff0c;也可以用字符终端命令行的方式来建立。 一、在图形桌面下建立一个新用户“xiaodu”。 如图1&#xff0c;打开设置界面&#xff0c;选中“账户”选项。 图1 选中账户选项 进入“账户”选项后&#xff0c;如图2&a…

初学者指南:如何在Windows 11中自定义任务栏颜色,全面解析!

Windows任务栏如何修改颜色&#xff1f;任务栏可以说是电脑桌面上比较不“起眼”的东西&#xff0c;但是也有不少小伙伴会想要将自己的电脑任务栏设置得好看&#xff0c;比如说修改电脑任务栏透明度&#xff0c;以及修改任务栏颜色。 电脑任务栏设置可以修改任务栏颜色&#xf…

mysql学习教程,从入门到精通,SQL ORDER BY 子句(14)

1、SQL ORDER BY 子句 在本教程中&#xff0c;您将学习如何对SELECTSQL查询返回的数据进行排序。 1.1、对结果集排序 通常&#xff0c;当您使用SELECT语句从表中获取数据时&#xff0c;结果集中的行没有任何特定的顺序。如果要按特定顺序排列结果集&#xff0c;则可以在语句…

镜舟科技与中启乘数科技达成战略合作,共筑数据服务新生态

当今企业数据管理日益规范化&#xff0c;数据应用系统随着数据类型与数量的增长不断细分&#xff0c;为了提升市场竞争力与技术实力&#xff0c;数据领域软件服务商与上下游伙伴的紧密对接与合作显得尤为重要。通过构建完善的生态系统&#xff0c;生态内企业间能够整合资源、共…

只有C盘的windows系统通过磁盘分区分出D盘

为什么要从C盘中分出D盘&#xff1f; windows电脑的一个良好的操作规范是&#xff1a;C盘是系统盘&#xff0c;D盘是软件盘&#xff0c;E盘是数据盘&#xff0c;软件一般安装在D盘&#xff0c;大家的一些数据资料可以放在E盘&#xff0c;软件大家一般按照在C盘系统盘&#xff…

GD - GD32350R_EVAL - PWM实验和验证3 - EmbeddedBuilder - 无源蜂鸣器 - 用PMOS来控制

文章目录 GD - GD32350R_EVAL - PWM实验和验证3 - EmbeddedBuilder - 无源蜂鸣器 - 用PMOS来控制概述笔记失败图成功图蜂鸣器管脚波形总结END GD - GD32350R_EVAL - PWM实验和验证3 - EmbeddedBuilder - 无源蜂鸣器 - 用PMOS来控制 概述 以前做了一个实验&#xff0c;用PMOS来…

电阻、电容、电感的封装大小分别与什么参数有关?

电阻封装大小与电阻值、额定功率有关&#xff1b; 电容封装大小与电容值、额定电压有关&#xff1b; 电感封装大小与电感量、额定电流有关。

4款高效的视频剪辑工具,帮你记录精彩瞬间。

随着各种主流媒体的流行&#xff0c;视频剪辑对与很多人来说都不是难题。因为相较于那些专业门槛相对较高的剪辑工具&#xff0c;现在有很多的剪辑工具使用起来都很简单&#xff0c;也完全能够满足大部分的剪辑需求。这次&#xff0c;我便要帮大家盘点4款专业、简单、易用的视频…

绕过CDN查找真实IP方法

1、前言 在新型涉网案件中&#xff0c;我们在搜集到目标主站之后常常需要获取对方网站的真实IP去进一步的信息搜集&#xff0c;但是现在网站大多都部署了CDN&#xff0c;将资源部署分发到边缘服务器 实现均衡负载&#xff0c;降低网络堵塞&#xff0c;让用户能够更快地访问自己…

AI智能体:一步步教你制作扣子工作流

这是一篇关于字节智能体平台扣子制作工作流的笔记。 完整智能体可参考&#xff1a;基于扣子(Coze)打造第一个智能体——个性化对话机器人 使用工作流优化机器人输出 1 旅游机器人的业务流程 提到工作流&#xff0c;不要感觉有什么高大上的&#xff0c;工作流本质就是我们完…

根据NVeloDocx Word模板引擎生成Word(六-结束)

前面几篇已经把E6开发平台配套的Word模版隐藏NVeloDocx的基础用法介绍了一遍&#xff0c;这些基础用法基本上可以完全覆盖实际业务的绝大部分需求。所以我们这一篇就介绍一些边边角角的内容&#xff0c;给本系列来一个首尾。 本篇的主要内容有&#xff1a; 1、汇总计算&#…

Nacos1.X中对NacosNamingService的实现

Nacos服务注册与发现的实现原理图 服务注册与发现的功能&#xff1a; 服务实例启动时注册到服务注册表、关闭时则注销&#xff08;服务注册&#xff09;服务注册中心根据服务实例定时发送的心跳包&#xff0c;实现健康检测&#xff08;健康检查BeatReactor中的BeatTask&#x…

打造最佳自闭症患全寄宿学校:为孩子的未来保驾护航

在自闭症儿童教育的广阔领域里&#xff0c;寻找一所能够全方位关注孩子成长、为他们的未来奠定坚实基础的学校&#xff0c;是许多家庭的心愿。广州的星贝育园自闭症儿童寄宿制学校&#xff0c;正是这样一所致力于成为最佳的自闭症儿童全寄宿学校&#xff0c;它以独特的教育理念…

软件测试学习笔记丨Postman基础使用

本文转自测试人社区&#xff0c;原文链接&#xff1a;https://ceshiren.com/t/topic/32096 一、Postman基础使用 1.1 简介 Postman是一款流行的API测试工具和开发环境&#xff0c;旨在简化API开发过程、测试和文档编制。优势&#xff1a; Postman可以快速构建请求&#xff0c…

使用 React Testing Library 测试自定义 React Hooks

自定义 React hooks为开发人员提供了在多个组件之间提取和重用常见功能的能力。然而&#xff0c;测试这些 hooks可能会有些棘手&#xff0c;特别是对于测试新手来说。在本文中&#xff0c;我们将探讨如何使用 React Testing Library 测试自定义 React hook。 测试 React组件 首…

录屏工具大揭秘:录屏快捷键、工具使用感受与建议

在繁忙的工作中&#xff0c;我们常常需要记录下一些重要的操作步骤或精彩瞬间&#xff0c;这时录屏工具就派上了用场&#xff1b;接下来&#xff0c;我将以轻松愉悦的方式&#xff0c;为大家介绍四款常用的录屏工具及其快捷键&#xff0c;并分享使用感受与建议&#xff1a; 录…