C++数据结构与算法——二叉搜索树的属性

C++第二阶段——数据结构和算法,之前学过一点点数据结构,当时是基于Python来学习的,现在基于C++查漏补缺,尤其是树的部分。这一部分计划一个月,主要利用代码随想录来学习,刷题使用力扣网站,不定时更新,欢迎关注!

文章目录

  • 一、二叉搜索树中的搜索(力扣700)
  • 二、验证二叉搜索树(力扣98)
  • 三、二叉搜索树的最小绝对差(力扣530)
  • 四、二叉搜索树中的众数(力扣501)
  • 五、把二叉搜索树转换为累加树(力扣538)

一、二叉搜索树中的搜索(力扣700)

在这里插入图片描述

/*** 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:TreeNode* searchBST(TreeNode* root, int val) {if(root==NULL||root->val==val) return root;TreeNode * result;if(root->val<val){// 找右子树result = searchBST(root->right,val);}else{result = searchBST(root->left,val);}return result;}
};

在这里插入图片描述

二、验证二叉搜索树(力扣98)

在这里插入图片描述

/*** 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:TreeNode* pre = NULL;bool isValidBST(TreeNode* root) {// 使用二叉搜索树的特征,即使用线序遍历,pre结点的值总是比cur结点的值小if(root==NULL) return true;bool left = isValidBST(root->left);if(pre!=NULL){if(pre->val>=root->val){return false;}}pre = root;bool right = isValidBST(root->right);return left&&right;}
};

在这里插入图片描述

三、二叉搜索树的最小绝对差(力扣530)

在这里插入图片描述

/*** 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:int minNum = INT_MAX;TreeNode * pre=NULL;int result;void traversal(TreeNode * root){// 类似于判断二叉搜索树,使用pre和cur结点if(root==NULL) return;// 左中右traversal(root->left);if(pre!=NULL){if(root->val-pre->val<minNum){minNum = root->val-pre->val;}}pre = root;traversal(root->right);result = minNum;}int getMinimumDifference(TreeNode* root) {traversal(root);return result;}
};

在这里插入图片描述

四、二叉搜索树中的众数(力扣501)

在这里插入图片描述

/*** 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:TreeNode * pre=NULL;int count;int maxN =0;vector<int> findMode(TreeNode* root) {// 同样使用双指针的思想 统计众数vector<int> result;traversal(root,result);return result;}void traversal(TreeNode* root,vector<int>& result){if(root==NULL) return;//左traversal(root->left,result);//中if(pre==NULL) count =1;else if(root->val!=pre->val) count=1;else count+=1;// 更新结点pre = root;if(count>maxN){maxN = count;result.clear();result.push_back(root->val);}else if(count==maxN){result.push_back(root->val);}// 右traversal(root->right,result);      // 右return ;}
};

在这里插入图片描述

五、把二叉搜索树转换为累加树(力扣538)

在这里插入图片描述

/*** 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:int pre=0;TreeNode* convertBST(TreeNode* root) {if(root==NULL) return NULL;// 右中左遍历 从小到大convertBST(root->right);root->val += pre;// 更新prepre = root->val;convertBST(root->left);return root;}
};

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

插混、油混、增程式、轻混、强混,啥区别

这里写自定义目录标题 随着我国新能源汽车的大力推进&#xff0c;电车可以说是世界未来的主流&#xff0c;只不过现在是处在一个过渡时代 这是个好时代&#xff0c;因为我们见证并体验着历史过渡的细节 这是个不好的时代&#xff0c;因为我们可能只是未来新新人类的试验品 帮他…

mybatis原理图,我拿到了梦寐以求的字节跳动和腾讯双offer

Kafka 如何做到支持百万级 TPS &#xff1f; 先用一张思维导图直接告诉你答案&#xff1a; 顺序读写磁盘 生产者写入数据和消费者读取数据都是顺序读写的&#xff0c;先来一张图直观感受一下顺序读写和随机读写的速度&#xff1a; 从图中可以看出传统硬盘或者SSD的顺序读写甚…

网络编程的魔法师:探索Netty中Handler的奇妙世界

欢迎来到我的博客&#xff0c;代码的世界里&#xff0c;每一行都是一个故事 网络编程的魔法师&#xff1a;探索Netty中Handler的奇妙世界 前言Handler基础概念ChannelHandler与ChannelPipelineHandler链的执行流程不同类型的Handler处理网络事件Handler的异步特性 前言 在网络…

Linux设置程序任意位置执行(设置环境变量)

问题 直接编译出来的可执行程序在执行时需要写出完整路径比较麻烦&#xff0c;设置环境变量可以实现在任意位置直接运行。 解决 1.打开.bashrc文件 vim ~/.bashrc 2.修改该文件&#xff08;实现将/home/zhangziheng/file/seqrequester/build/bin&#xff0c;路径下的可执…

Spring Boot整合Kafka

文章目录 1. 介绍2. Kafka基础2.1. 安装KafKakafka集群搭建_kafka交流群-CSDN博客 3. Spring Boot整合Kafka3.1. 引入Kafka依赖3.2.编写配置文件 4. 生产者&#xff08;produced&#xff09;4.1. 生产者基础案例(基础测试) 5. 消费者5.1.消费者基本案例(基础测试) 6.Kafka常用配…

找不到msvcp140.dll无法运行程序如何处理?分享5种解决方法

在计算机系统运行过程中&#xff0c;如果无法找到必要的动态链接库文件msvcp140.dll&#xff0c;可能会引发一系列的问题与故障。这个特定的dll文件是Microsoft Visual C Redistributable Package的一部分&#xff0c;对于许多基于此编译环境开发的应用程序至关重要。缺失msvcp…

浅谈 Linux 网络编程 socket

文章目录 socket 介绍 socket 介绍 socket 被翻译成 网络套接字&#xff0c;这个名字实在是不好理解&#xff0c;我更愿意称为"插槽"。 忽略 socket 的中文名&#xff0c;先无脑记住两个规则&#xff1a; ① 记住&#xff0c;一个文件描述符(fd) 指向一个 socket&…

[HackMyVM]靶场 Adria

kali:192.168.56.104 主机发现 arp-scan -l 靶机:192.168.56.108 端口扫描 nmap -p- 192.168.56.108 开启了 22 80 139 445端口 进入web 编辑 /etc/hosts&#xff0c;把192.168.56.108 adria.hmv添加进去重新访问 里面没什么有用的东西&#xff0c;注册需要邮箱&#xff0c;…

车辆管理系统:一套系统掌握车辆的运营、维护和使用情况

hello&#xff0c;我是贝格前端工场&#xff0c;直接给大家介绍了各类通用的B端管理系统&#xff0c;收到了大家的欢迎。本次开始介绍针对具体行业的管理系统该如何设计和开发&#xff0c;欢迎大家持续关注、点赞&#xff0c;如有系统定制需求可以私信我们。 一、什么是车辆管理…

中小企业“数智未来”行动|ZStack Cloud 荣获“推荐方案”奖

2月29日&#xff0c;以“数智未来 共创数字时代新篇章”为主题的中小企业“数智未来”行动在京成功举办&#xff0c;本次活动由中央广播电视总台央视频和中国中小企业协会作为联合观察单位&#xff0c;带来了一系列帮助中小企业成就业务新价值和数智化升级的优秀产品和方案&…

信号系统之快速傅里叶变换

1 使用复数DFT的实数DFT 本文的主题&#xff0c;如何使用 FFT 计算真正的 DFT&#xff1f; 由于 FFT 是一种用于计算复数 DFT 的算法&#xff0c;因此了解如何将实数 DFT 数据输入和输出复数 DFT 格式非常重要。图 12-1 比较了实数 DFT 和复数 DFT 存储数据的方式。实数 DFT …

vue3的router

需求 路由组件一般放在&#xff0c;pages或views文件夹, 一般组件通常放在component文件夹 路由的2中写法 子路由 其实就是在News组件里面&#xff0c;再定义一个router-view组件 他的子组件&#xff0c;机会渲染在router-view区域 路由传参 <RouterLink :to"/news…