【LeetCode】HOT 100(15)

news2024/9/22 23:19:02

题单介绍:

精选 100 道力扣(LeetCode)上最热门的题目,适合初识算法与数据结构的新手和想要在短时间内高效提升的人,熟练掌握这 100 道题,你就已经具备了在代码世界通行的基本能力。

目录

题单介绍:

题目:98. 验证二叉搜索树 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过过过过啦!!!!

题目:114. 二叉树展开为链表 - 力扣(Leetcode)

题目的接口:

解题思路:

代码:

过过过过啦!!!!

写在最后:


题目:98. 验证二叉搜索树 - 力扣(Leetcode)

题目的接口:

/**
 * 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:
    bool isValidBST(TreeNode* root) {

    }
};

解题思路:

这道题我用的是前序遍历来判断的二叉搜索树,

我个人觉得前序遍历比较简单,

主要的思路如下:

前序遍历整个树,记录上一个节点的值,

在走左子树的时候,当前节点的值要比上一个节点的值要小,

在走右子树的时候,当前节点的值要比上一个节点的值要大,

我们直接通过函数参数传递上一个节点的值就行,

另外,这道题我一开始提交的时候,暴int了,所以只好改成long了

代码如下:

代码:

class Solution {
public:
    bool isValidBST(TreeNode* root, long left = LONG_MIN, long right = LONG_MAX) {
        if(root == nullptr) return true;
        long cur = root->val;
        return left < cur 
            && right > cur 
            && isValidBST(root->left, left, cur) //这里传的cur其实就是将上一个节点的值传下来
            && isValidBST(root->right, cur, right);
    }
};

过过过过啦!!!!

题目:114. 二叉树展开为链表 - 力扣(Leetcode)

题目的接口:

/**
 * 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 flatten(TreeNode* root) {

    }
};

解题思路:

首先,进阶条件O(1)算法我做不到,

然后是这道题的思路,真的不知道他们是怎么想出来的,

我一开始的思路是先前序遍历一遍,把数值拿到手,存进数组,

然后用这个数组做一个链表,但是他需要原地转换,感觉不太行的通,就用了其他的方法。

具体思路如下 :

把左子树嫁接到右子树,让原来的右子树嫁接到左子树的最右节点,

只到不存在左子树(全部根据题目要求置空)就能模拟出前序遍历,

如果有疑问可以画个图自己看一下,我这里就不演示了

代码如下:

代码:

/**
 * 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 flatten(TreeNode* root) {
        while(root != nullptr) {
            if(root->left == nullptr) { //左子树为空
                root = root->right;
            }
            else { //存在左节点
                TreeNode* prev = root->left;
                while(prev->right) prev = prev->right; //找到左子树的最右节点 
                prev->right = root->right; //将原来的右子树移植到左子树的最右节点 
                root->right = root->left; //将左子树插入进右子树
                root->left = nullptr; //题目的要求,将左节点置空
                root = root->right; //继续找下一个左子树不为空的节点
            }
        }
    }
};

过过过过啦!!!!

写在最后:

以上就是本篇文章的内容了,感谢你的阅读。

如果感到有所收获的话可以给博主点一个哦。

如果文章内容有遗漏或者错误的地方欢迎私信博主或者在评论区指出~

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

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

相关文章

024.【链表算法】

1. 创建单向链表 例如&#xff0c;有“学生”这样一个链表&#xff0c;链表中需要包括学生的姓名、性别、学号等一些基本信息。创建这样的一个链表&#xff0c;链表里面包括多个学生的信息。 可以看出&#xff0c;“学生一”的尾结点“next”指向了下一个“学生二”的头结点学…

【并发编程】创建线程的三种方法

源码 Runnable 函数式接口 package java.lang; FunctionalInterface public interface Runnable { public abstract void run(); }Thread 就是一个典型的静态代理模式 public class Thread implements Runnable {private Runnable target;public Thread() { in…

接口测试用例如何编写?

目录 前言&#xff1a; 在开始编写接口测试用例之前&#xff0c;需要注意几件事&#xff1a; 编写接口测试用例的步骤包括&#xff1a; 常遇到的问题包括&#xff1a; 前言&#xff1a; 编写接口测试用例是接口测试的重要一环。好的接口测试用例能够充分覆盖接口各种情况&…

jmeter负载测试中如何找到最大并发用户数(实战)

目录 前言 负载测试概念 脚本总体设计&#xff1a; 场景介绍&#xff1a; 前言 在进行负载测试时&#xff0c;找到最大并发用户数是非常重要的&#xff0c;这个值将会告诉您系统可以承受多大的并发请求。 在性能测试中&#xff0c;当我们接到项目任务时&#xff0c;很多时…

热烈Matplotlib子图不不会画来看看-分图绘制(怒肝万字)

&#x1f468;&#x1f3fb;‍&#x1f393;博主介绍&#xff1a;大家好&#xff0c;我是大锤爱编程的博客_CSDN博客-大数据,Go,数据分析领域博主&#xff0c;有五年的数据开开发&#xff0c;有着丰富的数仓搭建、数据分析经验。我会在我的系列文章里面分享我学到的知识&#x…

计算机服务器中了encrypted勒索病毒怎么办,什么是encrypted勒索病毒

Encrypted勒索病毒是一种非常危险的电脑病毒&#xff0c;该病毒通过加密计算机中的文件和数据&#xff0c;使其无法访问和使用计算机&#xff0c;并要求受害者支付一定的赎金以获得解密密钥。 Encrypted勒索病毒是一种常见的勒索软件&#xff0c;由于它使用先进的加密技术&…

ansible的部署和模块

一、 ansible 的概述 1、ansible简介 Ansible是一款为类Unix系统开发的自由开源的配置和自动化工具。 它用Python写成&#xff0c;类似于saltstack和Puppet&#xff0c;但是有一个不同和优点是我们不需要在节点中安装任何客户端。 它使用SSH来和节点进行通信。Ansible基于 …

【OpenCV DNN】Flask 视频监控目标检测教程 09

欢迎关注『OpenCV DNN Youcans』系列&#xff0c;持续更新中 【OpenCV DNN】Flask 视频监控目标检测教程 09 3.9 OpenCVFlask多线程处理实时监控人脸识别新建 Flask 项目 cvFlask09Python程序文件视频流的网页模板程序运行 本系列从零开始&#xff0c;详细讲解使用 Flask 框架…

Windows版Redis安装

最近电脑重装了系统&#xff0c;很多常用的软件、应用都没有了&#xff0c;所以需要重新装&#xff0c;所以想借此机会把一些安装比较复杂的应用的安装过程&#xff0c;重新记录一下&#xff0c;方便后续&#xff0c; 安装 Redis默认只有Linux的版本&#xff0c;但是微软为了更…

Python面向对象编程1-面向过程的简单纸牌游戏程序 项目1.4 打印牌的点数和花色

总项目目标&#xff1a;用面向过程思想设计一个简单的纸牌游戏程序&#xff0c;称为"Higher or Lower"&#xff08;高还是低&#xff09;。游戏中&#xff0c;玩家需要猜测接下来的一张牌是比当前牌高还是低。根据猜测的准确性&#xff0c;玩家可以得到或失去相应的积…

容器(第九篇)ansible-playbook

Ansible 的脚本 --- playbook 剧本 playbooks 本身由以下各部分组成 &#xff08;1&#xff09;Tasks&#xff1a;任务&#xff0c;即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 &#xff08;2&#xff09;Variables&#xff1a;变量 &#xff08;3&…

pytorch搭建LeNet网络实现图像分类器

pytorch搭建LeNet网络实现图像分类器 一、定义LeNet网络模型1&#xff0c;卷积 Conv2d2&#xff0c;池化 MaxPool2d3&#xff0c;Tensor的展平&#xff1a;view()4&#xff0c;全连接 Linear5&#xff0c;代码&#xff1a;定义 LeNet 网络模型 二、训练并保存网络参数1&#xf…

GAMES101笔记 Lecture03 Transformation

目录 Transoformation(变换)Why stuty transformation(为什么要学习变换呢?)2D transformations(2D变换)Scale transformation(缩放变换)Reflection Matrix(反射矩阵)Shear Matrix(切变矩阵) Rotate transformation(旋转变换)Linear Transforms Matrices(线性变换 矩阵) Hom…

Java泛型详解,史上最全图文详解

泛型在java中有很重要的地位&#xff0c;无论是开源框架还是JDK源码都能看到它。 毫不夸张的说&#xff0c;泛型是通用设计上必不可少的元素&#xff0c;所以真正理解与正确使用泛型&#xff0c;是一门必修课。 一&#xff1a;泛型本质 Java 泛型&#xff08;generics&#…

C#程序设计——Windows应用程序开发,1、初步掌握Windows应用程序的设计方法。2、掌握常用窗体控件的使用方法。

Windows应用程序开发 一、实验目的 初步掌握Windows应用程序的设计方法。掌握常用窗体控件的使用方法。 二、实验内容 1、设计一个Windows应用程序&#xff0c;创建一个用于添加学生个人基本信息的窗体&#xff0c;窗体下方法同时滚动信息“天行健&#xf…

前端学习-html基础

html学习与总结 一、基础认知 1.1.1 认识网页&#xff08;了解&#xff09; ➢ 问题1&#xff1a;网页由哪些部分组成&#xff1f; ✓ 文字、图片、音频、视频、超链接 ➢ 问题2&#xff1a;我们看到的网页背后本质是什么&#xff1f; ✓ 前端程序员写的代码 ➢ 问题3&a…

设计模式的几大原则

设计模式原则 前言一.单一职责原则1.1 定义1.2 例子1.3 总结 二.里氏替换原则2.1 定义1.2 例子1.3 总结 三.依赖倒置原则3.1 定义3.2例子3.3总结 四.接口隔离原则4.1 定义4.2 例子4.3 总结五.迪米特法则5.1 定义5.2 例子5.3 总结 六.开闭原则6.1 定义6.2 例子6.3 结论 前言 设…

MongoDB复制(副本)集实战及其原理分析-04

MongoDB复制集 复制集架构 在生产环境中&#xff0c;不建议使用单机版的MongoDB服务器。 原因如下&#xff1a; 单机版的MongoDB无法保证可靠性&#xff0c;一旦进程发生故障或是服务器宕机&#xff0c;业务 将直接不可用。 一旦服务器上的磁盘损坏&#xff0c;数据会直接丢…

UDS系列-31服务(Routine Control)

诊断协议那些事儿 诊断协议那些事儿专栏系列文章,本文介绍例程控制服务RoutineControl,该服务的目的是Client端使用Routine Control服务来执行定义的步骤序列并获取特定序列的相关结果。这个服务经常在EOL、Bootloader中使用,比如,检查刷写条件是否满足、擦除内存、覆盖正…

post接口请求测试,通俗易懂

目录 前言&#xff1a; GET方法和POST方法传递数据的异同 POST方法如何传递数据 接口测试软件简介 POST请求接口的测试 测试方法 3.保存接口测试用例&#xff0c;生成自动化测试套件 总结 前言&#xff1a; Post请求是HTTP中请求方法之一&#xff0c;用于向服务器提交…