代码随想录day13 | 226.翻转二叉树 101.对称二叉树

news2024/11/26 3:57:09

文章目录

    • 一、翻转二叉树
    • 二、对称二叉树

一、翻转二叉树

使用前、后序反转最为方便。

// 使用递归三部曲
class Solution
{
public:
    TreeNode *dfs(TreeNode *root)
    {
        // 前序反转
        if (root == nullptr)
            return root;
        swap(root->left, root->right);
        dfs(root->left);
        dfs(root->right);
        return root;
    }
    TreeNode *invertTree(TreeNode *root)
    {
        dfs(root);
        return root;
    }
};

为啥不推荐中序?

中序遍历,某些节点的左右孩子会翻转两次,某些节点左右孩子不会被反转。

二、对称二叉树

101.对称二叉树
关键在于,看这个节点对应的左子树和右子树是否可以相互反转。

1、如何比较呢?

比较的是两个子树的里侧和外侧的元素是否相等。
在这里插入图片描述

2、确定遍历顺序?

使用后续!(左 右 根)

3、为啥使用后续呢?

因为要把左右孩子的信息返回给根节点,这样才能判断是否能够反转。

确定递归函数的参数和返回值:

 bool compare(TreeNode* left,TreeNode* right)

终止条件:
在这里插入图片描述

bool compare(TreeNode *left, TreeNode *right)
{
    if (left != nullptr && right == nullptr)
        return false;
    else if (left == nullptr && right != nullptr)
        return false;
    else if (left == nullptr && right == nullptr)
        return true;
    else if (left->val != right->val)
        return false;

	else ...
}

单层递归逻辑:

// 单层递归逻辑
bool outside = compare(left->left, right->right);
bool inside = compare(left->right, right->left);
bool res = outside && inside;                   
return res;

完整代码:

class Solution
{
public:
    bool compare(TreeNode *left, TreeNode *right)
    {
        if (left != nullptr && right == nullptr)
            return false;
        else if (left == nullptr && right != nullptr)
            return false;
        else if (left == nullptr && right == nullptr)
            return true;
        else if (left->val != right->val)
            return false;

        // 单层递归逻辑
        bool outside = compare(left->left, right->right); // 左 右
        bool inside = compare(left->right, right->left);  // 右 左
        bool res = outside && inside;                     // 根 根
        return res;
    }
    bool isSymmetric(TreeNode *root)
    {
        if (root == nullptr)
            return true;
        return compare(root->left, root->right);
    }
};

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

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

相关文章

三子棋(超详解+完整码源)

三子棋 前言一,游戏规则二,所需文件三,创建菜单四,游戏核心内容实现1.棋盘初始化1.棋盘展示3.玩家下棋4.电脑下棋5.游戏胜负判断6.game()函数内部具体实现 四,游戏运行实操 前言 C语言实现三子棋…

TEE GP(Global Platform)认证规范

TEE之GP(Global Platform)认证汇总 一、GP认证规范库 二、TEE GP认证规范文档 如果需要TEE对应的GP认证规范文档,请按照下方选择框选择TEE,然后Search,共查询到31个相关规范文档。 参考: GlobalPlatform Certification - Global…

利用python实现自增填充和脚本批量解压文件

和学弟整理学校档案 因为这个方法只用了一下午就干完了 净赚¥300 写文章记录一下 需求分析 我要储存很多个文件(几万个文件) 而且要按照文件的顺序进行排序的编号 目的是解放一下双手只用简单的ctrl cv实现命名的自增 如果没有库的话就pip install 库名 import t…

第一启富金:美联储决议及讲话来袭、黄金不改趋势性看涨前景

第一启富金基本面分析: 中国纸黄金交易通显示,全球最大黄金上市交易基金(ETF)截至07月22日持仓量为919.00吨,较上日增持5.20吨,本月止净减持2.90吨。 周二美国公布的7月消费者信心指数为117,远高于预期的111.8&#xf…

Docker Compose介绍及部署

Docker Compose介绍及部署 一、Docker Compose介绍:1、Compose简介2. YAML 文件格式及编写注意事项3. YAML数据结构 二、Docker Compose部署1、 Docker Compose 环境安装2.、Docker Compose配置常用字段3、Docker Compose 常用命令4、Docker Compose 文件结构编写配…

第五章:通过对抗擦除的目标区域挖掘:一种简单的语义分割方法

0.摘要 我们研究了一种逐步挖掘具有鉴别性的物体区域的原则方法,使用分类网络来解决弱监督语义分割问题。分类网络只对感兴趣对象中的小而稀疏的鉴别性区域有响应,这与分割任务的要求相背离,分割任务需要定位密集、内部和完整的区域以进行像素…

C#——多线程之Task

C#——多线程之Task 前言一、Task是什么?二、各应用场景以及实例分析1.异步执行代码2.等待异步操作完成3.并行执行多个任务4.处理异常5.取消异步操作 三、一些其他问题1.WhenAll与WhenAny的区别 总结 前言 在代码编写过程中,经常会用到多线程的知识&…

Vue如何配置eslint

eslint官网: eslint.bootcss.com eslicate如何配置 1、选择新的配置: 2、选择三个必选项 3、再选择Css预处理器 4、之后选择处理器 5、选择是提交的时候就进行保存模式 6、放到独立的配置文件上去 7、最后一句是将自己的数据存为预设 8、配合console不要出现的规则…

每天一道C语言编程(2^k进制数)

题目描述 设r是个2^k 进制数,并满足以下条件: (1)r至少是个2位的2^k 进制数。 (2)作为2^k 进制数,除最后一位外,r的每一位严格小于它右边相邻的那一位。 (3)…

NoSQL之 Redis 部署,配置与优化

文章目录 NoSQL之 Redis配置与优化一.关系数据库与非关系型数据库1.关系型数据库2.非关系型数据库3.关系型数据库和非关系型数据库区别4.非关系型数据库产生背景 二.Redis简介1.了解Redis2.Redis 具有以下几个优点3.Redis为何这么快 三.Redis 安装及应用1.Redis 安装部署2.Redi…

linux网卡命名规则与修改方法

一.前言: 在早期的的操作系统中例如fedora13或者ubuntu15之前网卡命名的方式为eth0,eth1,eth2,属于biosdevname 命名规范。当然这是针对intel网卡的命名规则,对于realtek类型的网卡会命名为ens33。但是这个编号往往不一…

数据库运维——MySQL主从复制

1.理解MySQL主从复制原理。 2.完成MySQL主从复制。 一、MySQL主从复制原理 MySQL主从复制是指将一个MySQL数据库服务器(称为主服务器)上的数据复制到其他MySQL数据库服务器(称为从服务器)的过程。它的原理如下: 主服…

如何利用OpenAI的函数调用特性

如何利用OpenAI的函数调用特性 函数调用能实现哪些功能? 简单来说,函数调用功能可以助你在请求方法时构建结构化的数据。因为生成模型的特性,它产生的数据往往是无结构的,即使在提示(prompt)中指定了输出格式,但实际…

3-Linux实操

Linux实践操作 开关机、重启、用户登陆注销关机&重启用户登陆和注销 用户管理添加用户修改用户密码删除用户查询用户信息切换用户查看当前用户用户组的添加和删除用户和组相关文件 实用指令指定运行级别init 命令帮助指令文件目录类时间日期类搜索查找类🔍压缩和…

新能源汽车直流充电桩和交流充电桩的区别

直流充电桩和交流充电桩的区别 你是否曾经想过,为什么有的电动汽车可以在半小时内充满电,而有的却需要几个小时?其实,这都取决于它们所使用的充电桩的不同。那么,直流充电桩和交流充电桩到底有哪些区别呢? 首先,工作…

网络变压器配套使用的网口连接器的选型注意事项及选购关注要点

Hqst盈盛(华强盛)电子导读:采购人员在网口连接器选型中如何选用到合适的产品,选用时要注意到哪些事项,这节将结合网口连接器实物和大家一起探讨,希望对大家有些帮助。 我们可以通过对下面五个方面的详细了解…

网工内推 | 售前、售后工程师,IE认证优先

01 广州佳杰科技有限公司 招聘岗位:IT售前工程师 职责描述: 1、负责所在区域 IT 产品的售前技术支持工作,包括客户交流、方案编写、配置报价、投标应标、测试、赋能等; 2、与厂商相关人员建立和保持良好的关系,相互配合,提高项目成功率和厂商满意度; 3、…

每日一题——链表中倒数最后k个结点

题目 输入一个长度为 n 的链表,设链表中的元素的值为 ai ,返回该链表中倒数第k个节点。 如果该链表长度小于k,请返回一个长度为 0 的链表。 数据范围:0≤n≤$105,0≤ai≤109,0≤k≤109 要求:…

MongoDB索引结构,到底是B-Tree还是B+Tree,请看这里!!

起因 网上关于MongoDB的索引结构到底是b树,还是b树的争论有很多,无法统一结论。 由来 MongoDB从3.2版本开始默认采用了WiredTiger存储引擎,网上很多说法是此引擎是BTree的索引结构,甚至有图有真相。但是认为MongoDB一直是B-Tre…

Docker compose(容器编排)

Docker compose(容器编排) 一、安装Docker compose 1.安装Docker compose Docker Compose 环境安装 Docker Compose 是 Docker 的独立产品,因此需要安装 Docker 之后在单独安装 Docker Compose#下载 curl -L https://github.com/docker/co…