【力扣刷题 | 第十一天】

news2024/11/17 22:23:38

前言: 

        我将会利用几天把树的经典例题都刷完,希望我可以坚持下去。

226. 翻转二叉树 - 力扣(LeetCode)

给你一棵二叉树的根节点 root ,翻转这棵二叉树,并返回其根节点。

 解题思路:我们交换每一层的左右节点就可以了,写一个递归,每一次传入一个节点,交换这个节点的左节点和右节点,再把分别把左节点和右节点作为新的节点参数传入这个函数中进行新一轮的交换,直到当前节点为空为止,

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if (root == NULL) return root;
        swap(root->left, root->right);  
        invertTree(root->left);         
        invertTree(root->right);        
        return root;
    }
};

注意点:这道题不推荐使用中序遍历解决,中序遍历的题解也不是像上面这么简单的,原因如下:
    由于左节点和右节点提前交换了位置,按照我们原来的这种写法在最后处理的时候如果按照左中右的顺序,会导致右节点没有被处理,而左节点被处理了两次。

  因此如果想要使用中序遍历,应该是这样:

class Solution {
public:
    TreeNode* invertTree(TreeNode* root) {
        if(root==NULL)
        {
            return root;
        }
       
        invertTree(root->left);
      
        swap(root->left,root->right);
               
        invertTree(root->left);
      
        return root;
    }
};

我们的第一个left是对树的真正左节点进行翻转,而第二个left是对此时 已经变成左节点 右节点进行翻转,这样就可以实现通过中序遍历来对树进行翻转。

101. 对称二叉树 - 力扣(LeetCode)

给你一个二叉树的根节点 root , 检查它是否轴对称。

class Solution {
public:
    bool compare(TreeNode* left, TreeNode* right) {
        // 首先排除空节点的情况
        if (left == NULL && right != NULL) return false;
        else if (left != NULL && right == NULL) return false;
        else if (left == NULL && right == NULL) 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 isSame = outside && inside;                    // 左子树:中、 右子树:中 (逻辑处理)
        return isSame;

    }
    bool isSymmetric(TreeNode* root) {
        if (root == NULL) return true;
        return compare(root->left, root->right);
    }
};

总结:

树的题型有很多,我们要多做多练,才可以更加娴熟的掌握树这种数据结构。

 

如果我的内容对你有帮助,请点赞,评论,收藏。创作不易,大家的支持就是我坚持下去的动力!

 

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

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

相关文章

C语言之运算符用法(补充前面运算符中的不足)

设定:int X20,Y10 1、算术运算符 注:自增和自减运算符只能用于变量,不可用于常量或表达式。另,X与X是不同的(–亦同)。以语句a[x]100;为例: a[X]100;执行之后得到:a[20] 100、X 21。//即,先执行…

Windows10下超详细Mysql安装

目录 0. 前言1. 下载mysql2. 开始安装3. 验证安装4. 环境变量配置 0. 前言 Mysql简介: MySQL是一种开源的关系型数据库管理系统(RDBMS),它使用SQL(结构化查询语言)语言进行数据的存储和访问。MySQL的设计…

git版本管理入门(本地/远程仓库,常用命令)

目录 git简介 安装git 配置SSH key Linux环境下需要命令生成ssh key 本地git管理 多人协作流程 追加 重新提交 git命令 git commit本地和git push远程 git stash和git stash pop暂存 git status查看修改哪些了文件​ git diff 查看修改前后的差异 git log查看提交…

Centos7安装配置Docker

1. 什么是Docker 在开篇之前考虑到阅读人群,我觉得有必要向各位读者朋友简单介绍一下Docker是什么,它解决了什么问题?Docker是基于Go语言实现的云开源项目。它对此给出了一个标准化的解决方案-----系统平滑移植,容器虚拟化技术。让开发者可以打包他们的…

从加密到签名:如何使用Java实现高效、安全的RSA加解密算法?

目录 1. 接下来让小编给您们编写实现代码!请躺好 ☺ 1.1 配置application.yml文件 1.2 RSA算法签名工具类 1.3 RSA算法生成签名以及效验签名测试 1.4 RSA算法生成公钥私钥、加密、解密工具类 1.5 RSA算法加解密测试 我们为什么要使用RSA算法来进行加解密&…

React之state详解

目录 执行过程 异步 React18与自动批处理 setState 推荐用法 ()>{return },this.state. 生命周期 数据没改变时​不渲染 shouldComponentUpdate PureComponent自动(推荐) 你真的理解setState吗? - 掘金 组件的私有…

《Nature Aging》: 揭示皮肤衰老的分子机制

一个人衰老最直接的体现就是皮肤衰老。人体的皮肤一般从25~30岁以后即随着年龄的增长而逐渐衰老,大约在35~40岁后逐渐出现比较明显的衰老变化。但是,我们的皮肤为什么会衰老呢?要回答这个问题,我们首先要了…

STC单片机存储器介绍和使用

STC单片机存储器介绍和使用 🌿STC15F2K60S2系列内部结构框图 🌿STC12C5A60S2系列内部结构框图 📑程序存储器(ROM/Flash) 🔖STC单片机ROM容量大小可以根据其型号和命名规则了解到。 🌿STC

chatgpt赋能python:Python怎样让画笔变粗

Python怎样让画笔变粗 Python是一门强大的编程语言,不仅适用于数据分析和机器学习等领域,也可以用来进行图像处理。在Python中,我们可以使用Pillow库来进行图像操作。在本篇文章中,我们将介绍如何使用Python和Pillow来让画笔变粗…

基于游客时空行为特征研究(两步路)

1 轨迹计算 1.1 使用geopy geopy模块常用于定位全球地址、以及经纬度相关的转换与计算,详细请参考: https://pypi.org/project/geopy/ 1.2 安装 pip install geopy 1.3 根据经纬度计算距离 Geopy可以使用测地线距离或大圆距离计算两点之间的测地线距离&a…

【C数据结构】无头非循环单向链表_SList

目录 无头非循环单向链表LinkedList 【1】链表概念 【2】链表分类 【3】无头单向非循环链表 【3.1】无头单向非循环链表数据结构与接口定义 【3.2】无头单向非循环链表初始化 【3.3】无头单向非循环链表开辟节点空间 【3.4】无头单向非循环链表销毁 【3.5】 无头单向非…

Qt中以qRegister开头的几个函数的用法说明

目录 1. 前言 2. qRegisterMetaTypeStreamOperators 2.1. 函数功能简述 2.2.用法举例1 3. qRegisterMetaType 1. 前言 Qt通过qRegister开头的函数和Q_DECLARE开头的几个宏向Qt元系统注册、声明一些非基本类型。一旦声明、注册后,在Qt元系统中就可以很方便的利用这…

神秘龙卷风

那道提示 打开后是一个加密压缩包,根据题目提示,这应该是一道暴力破解的题目 暴力破解后得到密码位5463 结果拿到是一串不止到啥的字符,根据提示应该是还要进行解码 经过查询,得知这个编码叫Brainfuck:(下面…

【Java高级语法】(七)Object类:同志,关于Object类的情况你了解多少嘞?~

Java高级语法详解之Object类 :one: 概念:two: 使用2.1 equals()方法2.2 hashCode()方法2.3 toString()方法2.4 finalize()方法2.5 getClass()方法2.6 clone()方法2.7 wait()、notify()和 notifyAll()方法 :three: 使用场景:ear_of_rice: 总结:bookmark_tabs: 本文源码下载地址 …

【前端知识】React 基础巩固(十五)——书籍购物车简单案例

React 基础巩固(十五)——书籍购物车简单案例 案例代码 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8" /><meta http-equiv"X-UA-Compatible" content"IEedge" /><meta name"v…

性能测试基础知识(二)性能测试流程

性能测试流程 一、性能测试需求分析二、性能测试计划和方案三、性能测试用例设计四、性能测试执行五、性能测试分析和调优六、性能测试报告总结 一、性能测试需求分析 1、熟悉被测系统&#xff08;业务功能、技术架构&#xff09; 2、明确测试内容 一般有以下几种类型&#xf…

chatgpt赋能python:Python中如何实现图形移动:探索基本概念和代码示例

Python中如何实现图形移动&#xff1a;探索基本概念和代码示例 介绍 图形移动是计算机科学中的基本概念&#xff0c;它与广泛应用的游戏、动画和用户界面设计有密切关系。 在Python中&#xff0c;我们可以使用各种库和框架来实现图形移动和动画效果&#xff0c;包括Tkinter&a…

chatgpt赋能python:Python截取指定字符操作:让你的SEO优化变得更简单

Python截取指定字符操作&#xff1a;让你的SEO优化变得更简单 在SEO优化中&#xff0c;截取指定字符是一个非常常见的操作。Python作为一款开源的高级编程语言&#xff0c;提供了许多方便的函数和方法来处理文本操作&#xff0c;包括截取指定字符。在本文中&#xff0c;我们将…

第三章 选择与循环

程序员必备技能(思想)&#xff1a;增量编写法。每写一部分代码要及时运行看结果是否正确&#xff0c;对于复杂程序很重要。 常用的运算符优先级&#xff1a; 逻辑非 &#xff01;> 算术运算符 > 关系运算符 > && > || > 赋值运算符 单目运算符 逻辑非…

chatgpt赋能python:Python如何随机生成26个字母

Python如何随机生成26个字母 Python是一种流行的编程语言&#xff0c;被广泛用于数据分析、人工智能和Web开发等领域。 Python中有很多库可以用于随机生成字符&#xff0c;包括Python内置的random库和第三方库string。 在本文中&#xff0c;我们将介绍如何使用这些库在Python中…