AlgorithmDay20

news/2024/9/20 1:25:05/ 标签: 算法

day20

[!NOTE]

return用作:return递归的上一层,而不一定一定是最后结果。

654.最大二叉树

又是构造二叉树,昨天大家刚刚做完 中序后序确定二叉树,今天做这个 应该会容易一些, 先看视频,好好体会一下 为什么构造二叉树都是 前序遍历

这个留着等二刷,昨天的没搞(因为)

617.合并二叉树

[!NOTE]

if(root2==nullptr){return root1;}//merge的思路root1->val+=root2->val;//合并值的思路
//或者定义新树
TreeNode* root = new TreeNode(0);

这次是一起操作两个二叉树了, 估计大家也没一起操作过两个二叉树,也不知道该如何一起操作,可以看视频先理解一下。 优先掌握递归。

两个二叉树的合并;

如果相同的节点,就加起来。不相同就合并为一个树。

(考察一起操作两个二叉树)

中左右:前序遍历 比较符合逻辑。

1.终止条件(两个树是同步遍历的 可以互相return return是return给递归的上一层)

        if(root1==nullptr){return root2;//因为两个树是同步遍历的 可以直接return}if(root2==nullptr){return root1;}

2.返回值

TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2)

3.本层循环(直接在一棵树上操作

 root1->left=mergeTrees(root1->left,root2->left);root1->right=mergeTrees(root1->right,root2->right);//root1->val+=root2->val;//可以后序 也可以前序 也可以中序

4.整体代码

class Solution {
public:TreeNode* mergeTrees(TreeNode* root1, TreeNode* root2) {if(root1==nullptr){return root2;//因为两个树是同步遍历的 可以直接return}if(root2==nullptr){return root1;}root1->left=mergeTrees(root1->left,root2->left);root1->right=mergeTrees(root1->right,root2->right);//root1->val+=root2->val;//可以后序 也可以前序 也可以中序//最后合成为一个树 就是root1的树return root1;}
};

700.二叉搜索树中的搜索

递归和迭代 都可以掌握以下,因为本题比较简单, 了解一下 二叉搜索树的特性。

[!TIP]

二叉搜索树bst

这是有序树,有数值的。左<根<右(中序)

平衡二叉搜索树

大名鼎鼎的avl树

它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

首先是(二叉搜索树的左根右)

其次是(高度差不超过1的平衡树)

map set 都是平衡二叉搜索树 增删是logn

只要加上onordered底层则是哈希表。

1.终止条件

if (root == NULL || root->val == val) return root;

2.返回值

TreeNode* searchBST(TreeNode* root, int val)

3.本层循环


4.整体代码

//递归
class Solution {
public:TreeNode* searchBST(TreeNode* root, int val) {if (root == NULL || root->val == val) return root;TreeNode* result = NULL;if (root->val > val) result = searchBST(root->left, val);if (root->val < val) result = searchBST(root->right, val);return result;}
};
//迭代
class Solution {
public:TreeNode* searchBST(TreeNode* root, int val) {TreeNode* result=nullptr;while(root!=nullptr){if(root->val>val)root=root->left;else if(root->val<val)root=root->right;else {result=root;break;}}return result;}
};

尽量写if语句不要简写{}容易出错

98.验证二叉搜索树

遇到 搜索树,一定想着中序遍历,这样才能利用上特性。

但本题是有陷阱的,可以自己先做一做,然后在看题解,看看自己是不是掉陷阱里了。这样理解的更深刻。

有效 二叉搜索树定义如下:

  • 节点的左子树只包含 小于 当前节点的数。
  • 节点的右子树只包含 大于 当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。

终止条件

if (root == NULL) return true;

返回值

long long maxVal = LONG_MIN; // 因为后台测试数据中有int最小值
bool isValidBST(TreeNode* root)

整体:

class Solution {
public:
long long maxval=LONG_MIN;bool isValidBST(TreeNode* root) {if(root==nullptr)return true;bool left=isValidBST(root->left);if(root->val>maxval){maxval=root->val;}else return false;bool right=isValidBST(root->right);return left&&right;}
};

简单题 要学会思想。

[!WARNING]

大体是:左根右

左就遍历即可 bool返回

根要判决 如果maxval的大 更新maxval 如果小 就是错

右就遍历即可 bool返回

返回的是左和右都满足 就可以返回true

或者

中间改为:

 if (pre != NULL && pre->val >= root->val) return false;pre = root; // 记录前一个节点
递归解决的全部流程:中序遍历会直接到最左边的子节点,我就然后再它的父节点,再看看父节点有没有右节点,没有就再左中就可以。假如有右了,也是先到右子树的左下角,左中,再左中右。

http://www.ppmy.cn/news/1433432.html

相关文章

c++补充

构造函数、析构函数 #include <iostream> using namespace std;// 构造函数、析构函数 // --- "构造函数"类比生活中的"出厂设置" --- // --- "析构函数"类比生活中的"销毁设置" --- // 如果我们不写这两种函数&#xff0c;编译…

OpenHarmony多媒体-metadata-extractor

简介 metadata-extractor是用于从图像、视频和音频文件中提取 Exif、IPTC、XMP、ICC 和其他元数据的组件。 下载安装 ohpm install ohos/metadata-extractorOpenHarmony ohpm环境配置等更多内容&#xff0c;请参考 如何安装OpenHarmony ohpm包 。 使用说明 引入文件及代码依…

深入理解Java消息中间件-消息的过滤和选择

在我们如今这个数据驱动的时代&#xff0c;从无数的信息中准确地过滤和选择出对我们最有价值的消息&#xff0c;是业务和技术领域中不可或缺的一个环节。本文我们将探讨消息的过滤和选择是如何实现的&#xff0c;同时简要介绍其背后的原理。 理解消息过滤和选择的重要性 首先…

Maven的下载和环境变量的配置

1下载 maven官网https://maven.apache.org/index.html点击Download 这个是Windows的下载版本&#xff0c;一般是最新的版本&#xff0c; 老的版本下载 以下是对应的老版本下载链接 下载好后是一个压缩包的形式 点击他进行解压到想放的文件夹中&#xff0c;&#xff08;一般不…

Maven基础篇3

Maven进阶 –分模块开发与设计 –聚合 –继承 –属性 –私服 1.分模块开发与设计 开发的时候是分包开发 一个人完成一个包即可&#xff1b; 甚至一个包需要多个人开发&#xff1b;需要对包进行拆分&#xff1b; 也就是将我们一个包的东西&#xff0c;拆分成一个工程&a…

神经网络进阶学习文章(一)

1.讲解YOLO有关知识 深入浅出Yolo系列之Yolov5核心基础知识完整讲解 - 知乎 (zhihu.com) 2.目标检测算法综述 目标检测算法综述 - 知乎 (zhihu.com) 3.TensorFlow详解&#xff0c;当然现在用的最多的是Pytorch框架了 谷歌大神带你十分钟看懂TensorFlow - 知乎 (zhihu.co…

ROS1快速入门学习笔记 - 04创建工作环境与功能包

一、定义 工作空间(workspace)是一个存放工程开发相关文件的文件夹。 src:代码空间&#xff08;Source Space&#xff09;build: 编辑空间&#xff08;Build Space&#xff09;devel:开发空间&#xff08;Development Space&#xff09;install:安装空间&#xff08;Install …

Laravel 6 - 第十六章 Artisan命令

​ 文章目录 Laravel 6 - 第一章 简介 Laravel 6 - 第二章 项目搭建 Laravel 6 - 第三章 文件夹结构 Laravel 6 - 第四章 生命周期 Laravel 6 - 第五章 控制反转和依赖注入 Laravel 6 - 第六章 服务容器 Laravel 6 - 第七章 服务提供者 Laravel 6 - 第八章 门面 Laravel 6 - …

Linux shell编程学习笔记47:lsof命令

0 前言 今天国产电脑提示磁盘空间已耗尽&#xff0c;使用用df命令检查文件系统情况&#xff0c;发现/dev/sda2已使用100%。 Linux shell编程学习笔记39&#xff1a;df命令https://blog.csdn.net/Purpleendurer/article/details/135577571于是开始清理磁盘空间。 第一步是查看…

服务器防入侵的方案浅析

随着物联网技术和互联网技术的日益发展&#xff0c;勒索病毒、工控安全、产线作业都面领着极大的威胁。智慧互联正在成为各个行业未来的发展方向&#xff0c;智慧互联包括物联网、万物互联&#xff0c;机器与机器&#xff0c;工业控制体系&#xff0c;信息化&#xff0c;也就是…

XiaodiSec day007 Learn Note 小迪安全学习笔记

XiaodiSec day007 Learn Note 小迪安全学习笔记 记录得比较凌乱&#xff0c;不尽详细 07 2023.12.31 cms识别 资产泄漏&#xff0c;资产即为网站的资源&#xff0c;了解到网站使用了那种cms对信息收集很有帮助 使用工具识别cms 识别cms后可以进行代码审计&#xff0c;或…

【RAG 论文】面向知识库检索进行大模型增强的框架 —— KnowledGPT

论文&#xff1a;KnowledGPT: Enhancing Large Language Models with Retrieval and Storage Access on Knowledge Bases ⭐⭐⭐⭐ 复旦肖仰华团队工作 论文速读 KnowledGPT 提出了一个通过检索知识库来增强大模型生成的 RAG 框架。 在知识库中&#xff0c;存储着三类形式的知…

数据库之数据库恢复技术思维导图+大纲笔记

大纲笔记&#xff1a; 事务的基本概念 事务 定义 用户定义的一个数据库操作系列&#xff0c;这些操作要么全做&#xff0c;要么全不做&#xff0c;是一个不可分割的基本单位 语句 BEGIN TRANSACTION 开始 COMMIT 提交&#xff0c;提交事务的所有操作 ROLLBACK 回滚&#xff0c…

BM25检索算法 python

1.简介 BM25&#xff08;Best Matching 25&#xff09;是一种经典的信息检索算法&#xff0c;是基于 TF-IDF算法的改进版本&#xff0c;旨在解决、TF-IDF算法的一些不足之处。其被广泛应用于信息检索领域的排名函数&#xff0c;用于估计文档D与用户查询Q之间的相关性。它是一种…

【AngularJs】前端使用iframe预览pdf文件报错

<iframe style"width: 100%; height: 100%;" src"{{vm.previewUrl}}"></iframe> 出现报错信息&#xff1a;Cant interpolate: {{vm.previewUrl}} 在ctrl文件中信任该文件就可以了 vm.trustUrl $sce.trustAsResourceUrl(vm.previewUrl);//信任…

CSS基础——1.CSS样式

CSS 是“Cascading Style Sheet”的缩写,中文意思为“层叠样式表”,用于描述网页的表现形式(例如网页元素的位置、大小、颜色等。css的主要作用是定义网页的样式 CSS样式 1. 行内样式 行内样式:直接定义在 HTML 标签的 style 属性中 <!DOCTYPE html> <html la…

文件读取和写入

1、with open 和 open close 的对比 with open 的优点 1、自动关闭文件&#xff1a;with 语句会在代码块执行完毕后自动关闭文件&#xff0c;无需显式调用 close() 方法。 2、异常安全&#xff1a;如果在代码块中发生异常&#xff0c;with 语句仍然会确保文件被正确关闭。 3、…

编译器的学习

常用的编译器&#xff1a; GCCVisual CClang&#xff08;LLVM&#xff09;&#xff1a; Clang 可以被看作是建立在 LLVM 之上的一个项目, 实际上LLVM是clang的后端&#xff0c;clang作为前端前端生成LLVM IR&#xff0c;https://zhuanlan.zhihu.com/p/656699711MSVC &#xff…

轻量和ECS对比:阿里云轻量应用服务器和云服务器有啥区别?

阿里云轻量应用服务器和云服务器ECS区别对照表&#xff0c;一看就懂的适用人群、使用场景、优缺点、使用限制、计费方式、网路和镜像系统全方位对比&#xff0c;阿里云服务器网aliyunfuwuqi.com整理ECS和轻量应用服务器区别对照表&#xff0c;可以在阿里云CLUB中心领取 aliyun.…

【银角大王——Django课程——ORM】

Django课程——ORM框架 Django 模型使用自带的 ORMORM 解析过程:ORM 对应关系表&#xff1a;下载mysqlclient安装包创建数据库——ORM只能操作表&#xff0c;无法创建数据库。连接数据库——修改settings中的DATABASESDjango操作表&#xff0c;在models.py文件中编写——操作表…