当前位置: 首页 > article >正文

Leetcode 二叉树中根遍历

在这里插入图片描述

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

算法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.kler.cn/a/305921.html

相关文章:

  • 工作和学习遇到的技术问题
  • 重构开发之道,Blackbox.AI为技术注入智能新动力
  • 开源模型应用落地-qwen模型小试-Qwen2.5-7B-Instruct-tool usage入门-集成心知天气(二)
  • 4-6-2.C# 数据容器 - ArrayList 扩展(ArrayList 注意事项、ArrayList 存储对象的特性、ArrayList 与数组的转换)
  • 【C++学习(37)】并发性模式:如生产者-消费者、读写锁等。 架构模式:如MVC、MVVM等。属于23 种设计模式吗? RAII 的关系?
  • Unity 性能优化方案
  • 力扣-96.不同的二叉搜索树 题目详解
  • Android Radio2.0——动态列表回调(七)
  • tcp、http和rpc
  • WebSocket详细介绍
  • OPEN AI o1已经像人类一样思考了。。。
  • 【iOS】present和push
  • 【AcWing】快速排序的Go实现
  • yolo训练出现Could not load library libcudnn_cnn_train.so.8问题及解决方法
  • 从大脑图谱/ROI中提取BOLD信号
  • 简单易懂的方式来解释机器学习(ML)和深度学习(DL)的区别与联系
  • 通信工程学习:什么是DWDM密集波分复用
  • 小众语言ruby在苹果中的初步应用
  • self-play RL学习笔记
  • 【开源免费】基于SpringBoot+Vue.JS购物商城网站(JAVA毕业设计)
  • ImDisk Toolkit将一部分RAM模拟成硬盘分区
  • 更新20240915机器视觉海康Visionmaster学习步骤
  • 解决tiktoken库调用get_encoding时SSL超时
  • Redis 与数据库数据一致性保证详解
  • MySQL——数据库的高级操作(二)用户管理(5)如何解决 root 用户密码丢失
  • 【QT】自制一个简单的时钟(跟随系统时间)