LeetCode 热题 100 | 二叉树(一)

目录

1  基础知识

1.1  先序遍历

1.2  中序遍历

1.3  后序遍历

2  94. 二叉树的中序遍历

3  104. 二叉树的最大深度

4  226. 翻转二叉树

5  101. 对称二叉树


菜鸟做题,语言是 C++

1  基础知识

二叉树常见的遍历方式有:

  • 先序遍历
  • 中序遍历
  • 后序遍历
  • 深度优先遍历 = 先序遍历
  • 广度优先遍历 = 层次遍历(后面有道题)

其实稍微观察一下就可以发现,“先序”、“中序”、“后序” 针对的是根节点的位置。即在 (根节点,左子树,右子树) 这个三元组中,根节点处于哪个位置。

1.1  先序遍历
  1. 根节点
  2. 根节点的左子树
  3. 根节点的右子树
vector<int> ans;
void preorder(TreeNode* root) {if (!root) return;ans.push_back(root->val);preorder(root->left);preorder(root->right);
}

这个例子包括后面的两个例子,都是按照指定顺序遍历二叉树,同时将每个节点的值放入到容器 ans 中。

1.2  中序遍历
  1. 根节点的左子树
  2. 根节点
  3. 根节点的右子树
vector<int> ans;
void inorder(TreeNode* root) {if (!root) return;inorder(root->left);ans.push_back(root->val);inorder(root->right);
}

1.3  后序遍历
  1. 根节点的左子树
  2. 根节点的右子树
  3. 根节点
vector<int> ans;
void postorder(TreeNode* root) {if (!root) return;postorder(root->left);postorder(root->right);ans.push_back(root->val);
}

2  94. 二叉树的中序遍历

属于中序遍历(显然)

通过第 1 节的介绍,想必解决这个问题就很容易了。需要注意的是,我们的递归可以不需要返回值,因此需要额外写一个返回值为 void 的函数(但貌似你每次都返回一个 vector<int> 也行得通)

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

3  104. 二叉树的最大深度

属于后序遍历:先获得左右子树的最大深度,再获得本子树的最大深度

class Solution {
public:int maxDepth(TreeNode* root) {if (!root) return 0;int leftMaxDepth = maxDepth(root->left);int rightMaxDepth = maxDepth(root->right);return 1 + max(leftMaxDepth, rightMaxDepth);}
};

精简版:

class Solution {
public:int maxDepth(TreeNode* root) {if (!root) return 0;return 1 + max(maxDepth(root->left), maxDepth(root->right));}
};

4  226. 翻转二叉树

属于先序遍历

解题思路:

  1. 完成当前节点的翻转
  2. 完成其左右子树的翻转
class Solution {
public:TreeNode* invertTree(TreeNode* root) {if (!root) return nullptr;TreeNode * temp = root->right;root->right = root->left;root->left = temp;invertTree(root->left);invertTree(root->right);return root;}
};

这道题就没有单独写一个返回值为 void 的函数,虽然递归期间的返回值都没有派上用场,但是最重要的是最后一个返回值,它返回的是整棵二叉树的根节点,符合本题对返回值的要求。

5  101. 对称二叉树

属于先序遍历;少有的参数需要传两个指针的题

解题思路:

  1. 判断左右对称位置上的两个节点是否都存在
  2. 判断这两个节点的值是否相等
  3. 判断这两个节点的左右子树是否对称

思路说明图:

  • 对称位置上的两个节点进行比较,即左侧的 “2” 和右侧的 “2”
  • 左侧的 “2” 的左子树和右侧的 “2” 的右子树进行比较
  • 左侧的 “2” 的右子树和右侧的 “2” 的左子树进行比较
class Solution {
public:bool check(TreeNode * p, TreeNode * q) {if (!p && !q) return true;if (!p || !q) return false;return p->val == q->val &&check(p->left, q->right) && check(p->right, q->left);}bool isSymmetric(TreeNode* root) {return check(root->left, root->right);}
};

说明:

if (!p && !q) return true;
if (!p || !q) return false;

第一行判断是指,当 p 和 q 都为空指针时,属于是对称的情况;第二行判断是指,当 p 和 q 中只有一方为空指针时,属于是非对称的情况。

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

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

相关文章

K线实战分析系列之二:伞形线

K线实战分析系列之二&#xff1a;伞形线 一、伞形线二、锤子线三、上吊线四、锤子线和上吊线的特征 一、伞形线 可以是看涨信号&#xff0c;也可以是看跌信号&#xff0c;具体要看它处于趋势的哪个位置 二、锤子线 出现在下行趋势中就叫锤子线锤子线是阳线看涨意义更大一点市…

免费的WP模板网站推荐

免费wordpress模板下载 高端大气上档次的免费wordpress主题&#xff0c;首页大图全屏显示经典风格的wordpress主题。 https://www.wpniu.com/themes/289.html wordpress免费企业主题 深蓝色经典实用的wordpress网站模板&#xff0c;用wordpress免费企业主题搭建网站。 http…

vue3获取环境变量import.meta.env

vitevue的时候环境变量的获取方式变成如下&#xff1a; console.log(import.meta.env)

Java之线程同步、synchronized用法及原理

线程的同步 场景1&#xff1a;两个线程同时访问一个变量&#xff0c;一个线程自增&#xff0c;一个线程自减 public class thread11 {public static void main(String[] args) throws InterruptedException {Thread thread1 new AddThread();Thread thread2 new DecThread(…

java数据结构与算法刷题-----LeetCode654. 最大二叉树

java数据结构与算法刷题目录&#xff08;剑指Offer、LeetCode、ACM&#xff09;-----主目录-----持续更新(进不去说明我没写完)&#xff1a;https://blog.csdn.net/grd_java/article/details/123063846 文章目录 1. 法一&#xff1a;单调栈2. 法二&#xff1a;递归 1. 法一&…

读人工不智能:计算机如何误解世界笔记02_Hello,world

1. Hello&#xff0c;world 1.1. “Hello&#xff0c;world”是布赖恩克尼汉和丹尼斯里奇于1978年出版的经典著作《C程序设计语言》中的第一个编程项目 1.2. 贝尔实验室可以说是现代计算机科学界中的智库&#xff0c;地位好比巧克力界的好时巧克力 1.3. 计算机科学界的大量创…

vue从flask获取数据并显示

记录一个前后端分离遇到的问题&#xff0c;即vue前端从flask后端获取数据。具体描述如下&#xff1a;flask只负责连接数据库并获取数据库的数据&#xff0c;并返回给前端vue&#xff1b;vue则需要获取后端返回的数据并显示。 方法如下&#xff0c;分别用一个vue组件和一个flas…

C++——基础语法(3):内联函数、auto关键字、基于范围的for循环、空指针nullptr

6. 内联函数 在函数前加入inline修饰即可将函数变为内联函数。所谓内联函数&#xff0c;就是在编译时C编译器会将函数体在调用内联函数的地方展开&#xff0c;从而省去了调用函数的栈帧开销&#xff0c;提高程序运行效率。 inline int Add(int a, int b) {return a b; } int …

Ansible user 模块 该模块主要是用来管理用户账号

目录 参数语法验证创建用户删除用户验证 删除用户 参数 comment  # 用户的描述信息 createhome  # 是否创建家目录 force  # 在使用stateabsent时, 行为与userdel –force一致. group  # 指定基本组 groups  # 指定附加组&#xff0c;如果指定为(groups)表示删除所有…

Camunda7.18流程引擎启动出现Table ‘camunda_platform_docker.ACT_GE_PROPERTY‘的解决方案

文章目录 1、问题描述2、原因分析3、解决方案3.1、方案一&#xff1a;降低mysql版本3.2、方案二&#xff1a;增加nullCatalogMeansCurrent参数&#xff08;推荐&#xff09; 4、总结 1、问题描述 需要在docker中&#xff0c;部署Camunda流程引擎。通过启动脚本camunda-platfor…

【C++】类和对象之拷贝构造函数篇

个人主页 &#xff1a; zxctscl 文章封面来自&#xff1a;艺术家–贤海林 如有转载请先通知 文章目录 1. 前言2. 传值传参和传引用传参3. 概念4. 特征 1. 前言 在前面学习了6个默认成员函数中的构造函数和析构函数 【C】构造函数和析构函数详解&#xff0c;接下来继续往后看拷…

Github 2024-02-21 开源项目日报 Top10

根据Github Trendings的统计&#xff0c;今日(2024-02-21统计)共有10个项目上榜。根据开发语言中项目的数量&#xff0c;汇总情况如下&#xff1a; 开发语言项目数量Python项目8非开发语言项目1TypeScript项目1 gpt4free 语言模型集合改进计划 创建周期&#xff1a;300 天开…

<网络安全>《51 网络攻防专业课<第十四课 - 华为防火墙的使用(4)>

8 防火墙的防范技术&#xff08;3&#xff09; 8.1 IP spoofing攻击防范 攻击介绍 为了获得访问权&#xff0c;或隐藏入侵者的身份信息&#xff0c;入侵者生成带有伪造源地址的报文。 处理方法 检测每个接口流入的IP报文的源地址与目的地址&#xff0c;并对报文的源地址反查路…

【图论】【堆优化的单源路径】LCP 20. 快速公交

作者推荐 【广度优先搜索】【网格】【割点】【 推荐】1263. 推箱子 LCP 20. 快速公交 小扣打算去秋日市集&#xff0c;由于游客较多&#xff0c;小扣的移动速度受到了人流影响&#xff1a; 小扣从 x 号站点移动至 x 1 号站点需要花费的时间为 inc&#xff1b; 小扣从 x 号站…

计算机组成原理(14)----总线

目录 一.总线的物理实现 二.总线概述 三.总线的特性 四.总线的分类 &#xff08;1&#xff09;按数据传输格式分类 •串行总线 •并行总线 &#xff08;2&#xff09;按总线功能分类 •片内总线 •系统总线 系统总线的结构 •通信总线 &#xff08;3&#xff09;按…

从软硬件以及常见框架思考高并发设计

目录 文章简介 扩展方式 横向扩展 纵向扩展 站在软件的层面上看 站在硬件的层面上看 站在经典的单机服务框架上看 性能提升的思考方向 可用性提升的思考方向 扩展性提升的思考方向 文章简介 先从整体&#xff0c;体系认识&#xff0c;理解高并发的策略&#xff0c;方…

深入理解JS的执行上下文、词法作用域和闭包(上)

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

ARM Cortex-X5 传言表现不佳,高功率浪涌和低多核分数影响即将推出的核心设计

ARM 的新 Cortex-X5 设计似乎遇到了问题&#xff0c;有新的传言称&#xff0c;超级核心在提高时钟速度时会经历严重的高功耗&#xff0c;并且当最大功率限制降低时&#xff0c;多核性能会下降。虽然这对高通来说可能不是问题&#xff0c;因为据说其 Snapdragon 8 Gen 4 采用定制…

华为HCIP Datacom H12-831 卷24

多选题 1、如图所示&#xff0c;某园区部署OSPF实现网络互通&#xff0c;其中Area1部署为NSSA区域。某工程师为了实现R1访问R4的环回口地址&#xff0c;在R4的OSPF进程中引入直连路由。以下关于该场景的描述,错误的有哪些项? A、在R4引入直连路由后&#xff0c;R1通过转换后的…

服务区智慧公厕

在如今追求智能化、便捷化的社会背景下&#xff0c;高速公路服务区智慧公厕正成为人们关注的焦点。作为高速公路上的必要设施&#xff0c;公厕的提升已经不再局限于简单的清洁卫生&#xff0c;而是更多地涉及到智能化、舒适度和用户体验。本文以智慧公厕源头厂家广州中期科技有…