144.二叉树的前序遍历,145.二叉树的后序遍历,94.二叉树的中序遍历

简介: 本内容涵盖了二叉树的三种遍历方法:前序遍历(144题)、中序遍历(94题)和后序遍历(145题)。每种遍历方式通过递归实现,分别遵循“中左右”、“左中右”和“左右中”的访问顺序。题目提供了多个示例,涵盖空树、单节点树及普通二叉树的情况,节点值范围为[-100, 100],节点数量不超过100。代码实现均采用C++,定义递归函数完成遍历,并将结果存储在向量中返回。

题目:144. 二叉树的前序遍历

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

示例 1:

输入:root = [1,null,2,3]

输出:[1,2,3]

示例 2:

输入:root = []

输出:[]

示例 3:

输入:root = [1]

输出:[1]

示例 4:

输入:root = [1,2]

输出:[1,2]

示例 5:

输入:root = [1,null,2]

输出:[1,2]

提示:

树中节点数目在范围 [0, 100] 内

-100 <= Node.val <= 100

题解:

class Solution {
public:
    void traversal(TreeNode* cur, vector<int>& vec) {
        if (cur == NULL) return;
        vec.push_back(cur->val);    // 中
        traversal(cur->left, vec);  // 左
        traversal(cur->right, vec); // 右
    }
    vector<int> preorderTraversal(TreeNode* root) {
        vector<int> result;
        traversal(root, result);
        return result;
    }
};

题目:145. 二叉树的后序遍历

给你一棵二叉树的根节点 root ,返回其节点值的 后序遍历 。

示例 1:

输入:root = [1,null,2,3]

输出:[3,2,1]

示例 2:

输入:root = []

输出:[]

示例 3:

输入:root = [1]

输出:[1]

提示:

树中节点的数目在范围 [0, 100] 内

-100 <= Node.val <= 100

题解:

class Solution {
public:
    void postorder(TreeNode *root, vector<int> &res) {
        if (root == nullptr) {
            return;
        }
        postorder(root->left, res);
        postorder(root->right, res);
        res.push_back(root->val);
    }
 
    vector<int> postorderTraversal(TreeNode *root) {
        vector<int> res;
        postorder(root, res);
        return res;
    }
};


题目:94. 二叉树的中序遍历

给定一个二叉树的根节点 root ,返回 它的 中序 遍历 。

示例 1:

输入:root = [1,null,2,3]

输出:[1,3,2]

示例 2:

输入:root = []

输出:[]

示例 3:

输入:root = [1]

输出:[1]

提示:

树中节点数目在范围 [0, 100] 内

-100 <= Node.val <= 100

 题解:

class Solution {
public:
    void inorder(TreeNode* root, vector<int>& res) {
        if (!root) {
            return;
        }
        inorder(root->left, res);
        res.push_back(root->val);
        inorder(root->right, res);
    }
    vector<int> inorderTraversal(TreeNode* root) {
        vector<int> res;
        inorder(root, res);
        return res;
    }
};


相关文章
|
前端开发
uView Tabs 标签页
uView Tabs 标签页
427 0
39. 组合总和,40.组合总和II,131.分割回文串
1. **组合总和**(LeetCode 39):从无重复元素的整数数组中选取任意数量的数字,使其和等于目标值。允许重复选取同一数字,通过递归与回溯实现。 2. **组合总和 II**(LeetCode 40):在含有重复元素的数组中选取数字,满足和为目标值,每个数字只能使用一次,需去重。 3. **分割回文串**(LeetCode 131):将字符串分割为多个子串,要求每个子串都是回文串,返回所有可能的分割方案。 代码实现中运用了深度优先搜索(DFS)、回溯法以及剪枝技巧,确保高效解决问题。
|
开发者
用D3制作矩形式树状结构图(Treemapping)并设计动画效果
矩形式树状结构图一般可以简称为Treemapping。Treemapping的各种制作方法网络上已经流行了许久,但是鲜有人在此之上有创作新意的,我在此基础上制作了一些动画效果供大家参考
1007 0
|
6月前
|
前端开发 JavaScript 安全
解锁React Server Components:彻底改变前端渲染方式
解锁React Server Components:彻底改变前端渲染方式
|
6月前
|
SQL 存储 关系型数据库
一、数据库和表的基本操作 DDL
在使用 MySQL 做项目或写业务逻辑时,离不开对数据库和数据表的基本操作。我们这次从创建数据库讲起,一步步带你掌握如何新建表、查看表结构、修改字段、重命名、删除等常用命令。每一个知识点都有示例代码可直接上手,还准备了一套完整的动手练习,帮助你把概念变成熟练技能。如果你刚入门 SQL,或者想系统梳理一遍 DDL 基础,这篇会是不错的起点。
|
3月前
|
缓存 供应链 监控
电商平台必看的API接口技术选型指南
本文介绍了电商场景下的核心API技术指标、系统集成方案、典型应用场景及技术选型建议。涵盖促销期万级QPS承载、毫秒级价格同步、订单实时追踪等关键技术能力,并提供商品信息标准化接入、用户行为分析、智能风控等集成方案,适用于全渠道库存管理、跨境贸易、直播电商等场景,助力企业优化技术架构,提升业务稳定性与效率。
|
10月前
|
算法
MATLAB在风险管理中的应用:从VaR计算到压力测试
本文介绍如何使用MATLAB进行风险管理,涵盖风险度量(如VaR)、压力测试和风险分解。通过历史模拟法、参数法和蒙特卡洛模拟法计算VaR,评估投资组合在极端市场条件下的表现,并通过边际VaR和成分VaR识别风险来源。结合具体案例和代码实现,帮助读者掌握MATLAB在风险管理中的应用,确保投资组合的稳健性。
|
6月前
|
存储 JSON 前端开发
菜鸟之路Day39一一登录
本文介绍了登录功能的实现及其相关技术细节,包括会话管理、令牌认证和异常处理等内容。作者通过 Java 实现了一个基于用户名和密码的登录接口,调用服务层和数据库层完成用户验证。同时,文章深入探讨了三种会话跟踪技术:Cookie、Session 和 JWT 令牌。 在 JWT 部分,详细讲解了其生成与校验流程,实现了登录成功后返回 JWT 令牌的功能。此外,文章还介绍了过滤器(Filter)和拦截器(Interceptor)的概念及应用,演示了如何利用它们实现登录校验。 最后,为解决前后端交互中异常响应不统一的问题,定义了一个全局异常处理器 将系统异常以统一的 JSON 格式返回给前端。
189 0
|
9月前
|
数据可视化 数据挖掘 BI
Quick BI体验测评报告
在数据驱动的时代,BI工具对企业发展至关重要。阿里云Quick BI作为一款全场景数据消费式BI平台,以其智能分析与可视化能力为企业提供强大支持。体验中,从申请试用账号到准备测试数据,再到数据可视化分析,Quick BI操作便捷、功能强大。通过拖拽即可生成精美报表,智能小Q助手更是大幅提升效率,助力企业深入挖掘数据价值,实现精准决策。
|
缓存 前端开发 JavaScript
React常见面试题(2024最新版)
React常见面试题(2024最新版)
376 1