面试经典150题 -- 二叉树搜索树 (总结)

总的链接 : 

https://leetcode.cn/studyplan/top-interview-150/

二叉搜索树相关概念 :

二叉搜索树是一个有序树

  • 若它的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
  • 若它的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
  • 它的左、右子树也分别为二叉排序树;

如下图所示  : 两颗都是搜索树 

530 . 二叉搜索树的最小绝对差

. - 力扣(LeetCode)

本题与下题相同 : 

. - 力扣(LeetCode)

递归1

根据二叉搜索树的特点 ,左 < 根 < 右 , 使用中序遍历可以得到一个包含所有结点值得从小到大得有序数组 ;

然后遍历这个得到得数组 , 依次更新ans = min (ans , res[i] - res[i-1]) ;即可 ;

class Solution {
public:vector<int> res ;void dfs(TreeNode* root){if(root == nullptr) return ;dfs(root->left) ;res.push_back(root->val);dfs(root->right);}int getMinimumDifference(TreeNode* root) {int ans = INT_MAX ;dfs(root) ;for(int i=1;i<res.size();i++){ans = min(ans , res[i] - res[i-1]);}return ans ;}
};

递归2

其实在递归得过程中,可以借助一个pre结点表示当前结点得上一个结点,那么就不需要再创建一个数组来存了,直接在遍历得过程中,更新答案即可 ;

class Solution {
public:int ans = INT_MAX ;TreeNode* pre = nullptr ;void dfs(TreeNode* root){if(root == nullptr) return ;dfs(root->left) ;if(pre!=nullptr){ans = min(ans , root->val - pre->val);}pre = root ;dfs(root->right);}int getMinimumDifference(TreeNode* root) {dfs(root) ;return ans ;}
};

230 . 二叉搜索树中第k小的元素

递归(中序遍历)

用中序遍历得到一个排好序的存放所有节点值的数组,然后输出第k个元素即可 ;

class Solution {
public:vector<int> res ;void dfs(TreeNode* root){if(root == nullptr) return ;dfs(root->left) ;res.push_back(root->val);dfs(root->right);}int kthSmallest(TreeNode* root, int k) {dfs(root);return res[k-1] ;}
};

递归2 : 

找到第k个,直接返回即可,不用存数组 ;

class Solution {
public: int t = 0 ;TreeNode* ans ;void dfs(TreeNode* root,int k){if(root == nullptr) return ;dfs(root->left,k) ;if(++t==k){ans = root ;return  ;}dfs(root->right,k);}int kthSmallest(TreeNode* root, int k) {dfs(root,k);return ans->val;}
};

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:vector<int> vc;void traversal(TreeNode* root){if(!root) return;traversal(root->left);vc.push_back(root->val);traversal(root->right);}bool isValidBST(TreeNode* root) {vc.clear();traversal(root);for(int i=1;i<vc.size();i++){if(vc[i] <= vc[i-1]) return false;}return true;}
};

参考 : 

二叉树基础知识总结-CSDN博客

二叉树遍历总结 -- 基于LeetCode-CSDN博客

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

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

相关文章

音视频开发之旅(68)-SD文生图

目录 效果展示 sd使用流程&#xff1a;选大模型、写关键词和设置参数 SDWebui文生图调用流程 StableDiffusion原理浅析 参考资料 一、效果显示 1girl,smile,highres,wallpaper,in summer,landscape 1girl,smile,highres,wallpaper,in summer,city,street 二、sd使用流程&a…

算法-两两交换链表中的节点

1、题目来源 24. 两两交换链表中的节点 - 力扣&#xff08;LeetCode&#xff09; 2、题目描述 给你一个链表&#xff0c;两两交换其中相邻的节点&#xff0c;并返回交换后链表的头节点。你必须在不修改节点内部的值的情况下完成本题&#xff08;即&#xff0c;只能进行节点交…

128 Linux 系统编程6 ,C++程序在linux 上的调试,GDB调试

今天来整理 GDB 调试。 在windows 上我们使用vs2017开发&#xff0c;可以手动的加断点&#xff0c;debug。 那么在linux上怎么加断点&#xff0c;debug呢&#xff1f;这就是今天要整理的GDB调试工具了。 那么有些同学可能会想到&#xff1a;我们在windows上开发&#xff0c;…

爬取数位观察城市数据代码展示

import requests import json from Crypto.Cipher import AES # 开始解密 from Crypto.Util.Padding import unpad #去填充的逻辑 import base64 url https://app.swguancha.com/client/v1/cPublic/consumer/baseInfo data {current: 1,"dimensionTime": "20…

【MySQL 探索之旅】初始MySQL数据库

&#x1f4da;博客主页&#xff1a;爱敲代码的小杨. ✨专栏&#xff1a;《Java SE语法》 | 《数据结构与算法》 | 《C生万物》 ❤️感谢大家点赞&#x1f44d;&#x1f3fb;收藏⭐评论✍&#x1f3fb;&#xff0c;您的三连就是我持续更新的动力❤️ &#x1f64f;小杨水平有…

分布式应用:kylin 部署 zabbix 监控平台

目录 一、实验 1.环境 2. kylin 修改mysql数据库 3. kylin 部署 zabbix 监控平台 4. kylin 修改 zabbix 配置 5. kylin 修改zabbix web 二、问题 1. zabbix_server 查看版本报错 2.zabbix_server 文件如何去掉注释"#"和空行 3. zabbix图表显示异常 4.zabbi…

osg qt5.15 osg3.6.3 osgEarth3.1 编译爬山

Demo演示&#xff1a;Qt5.15.2OSG3.6.3OsgEarth3.1的QtCreator下的msvc2019x64版本 osgQt编译 步骤一&#xff1a;下载解压 步骤二&#xff1a;CMake配置 步骤三&#xff1a;CMake配置添加osg环境 步骤四&#xff1a;CMake配置添加Qt环境 步骤五&#xff1a;CMake修改CMakeLis…

【Python笔记-设计模式】享元模式

一、说明 享元模式是一种结构型设计模式&#xff0c;它摒弃了在每个对象中保存所有数据的方式&#xff0c;通过共享多个对象所共有的相同状态&#xff0c;让你能在有限的内存容量中载入更多对象。 (一) 解决问题 旨在减少大量相似对象创建时的内存开销 (二) 使用场景 大量…

可视化 RAG 数据 - 用于检索增强生成的 EDA

每日推荐一篇专注于解决实际问题的外文,精准翻译并深入解读其要点,助力读者培养实际问题解决和代码动手的能力。 欢迎关注公众号(NLP Research),及时查看最新内容 原文标题:Visualize your RAG Data — EDA for Retrieval-Augmented Generation 原文地址:https://medi…

蜂窝物联网咖WiFi认证解决方案

项目背景 随着目前网咖模式越来越流行&#xff0c;给网吧部署一套无缝漫游的WIFI网络势在必行。同时&#xff0c;网吧无线准入的验证码在客户机上面进行更新&#xff0c;以防周边的人员进行蹭网&#xff0c;损失网吧的外网带宽。 01 需求分析 1. 网吧服务区域全部覆盖无盲区…

Android 解决后台服务麦克风无法录音问题

Android 解决后台无法录音问题 问题分析问题来源解决方案1. 修改清单文件:`AndroidManifest.xml`2. 修改启动服务方式3. 服务启动时创建前台通知并且指定前台服务类型参考文档最后我还有一句话要说我用心为你考虑黄浦江的事情,你心里想的却只有苏州河的勾当 问题分析 安卓9.…

5G端到端案例三:锚点基站侧5G连接与VOLTE专载建立流程冲突导致CSFB回落问题

1. 问题描述&#xff1a; NSA组网场景下&#xff0c;语音业务仍使用4G VoLTE方案&#xff0c;在拉网测试中&#xff0c;发现存在较多流程交叉导致的VOLTE接入失败的问题。 流程冲突时的空口信令表现为&#xff0c;终端添加SCG流程与语音专载流程冲突时&#xff0c;专有承载建…

125 Linux C++ 系统编程4 Linux 静态库制作,动态库制作,静态库和动态库对比。静态库运行时找不到库的bug fix

一 静态库 和动态库 对比 静态库的原理&#xff1a;假设我们有一个 静态库&#xff0c;大小为500M&#xff0c;这个静态库实现了一些打牌的逻辑算法&#xff0c;提供了一堆API&#xff0c;让开发者 可以轻松的实现 54张扑克牌的随机发牌&#xff0c;指定发牌等功能。 我们写了…

红日靶场3

靶场链接&#xff1a;漏洞详情 在虚拟机的网络编辑器中添加两个仅主机网卡 信息搜集 端口扫描 外网机处于网端192.168.1.0/24中&#xff0c;扫描外网IP端口&#xff0c;开放了80 22 3306端口 80端口http服务&#xff0c;可以尝试登录网页 3306端口mysql服务&#xff0c;可…

跟着野火学FreeRTOS:第二段(事件组)

在小节里面介绍了二进制信号量&#xff0c;计数信号量&#xff0c;互斥量和递归互斥量等功能&#xff0c;其中二进制信号量和计数信号量&#xff08;也包括队列&#xff09;常用于任务和任务之间以及任务和中断之间的同步&#xff0c;她们具有以下属性&#xff1a; 当等待的事…

备考2025年考研数学(三):2015-2024年考研数学真题练一练

今天&#xff0c;我们继续分享2015年-2024年的考研数学三选择题&#xff0c;随机做5道真题&#xff0c;并提供解析。看看正在备考2025年考研的你能做对几道。 考研数学和政治、英语一项&#xff0c;都是拉分大户&#xff0c;但是数学如果掌握了技巧&#xff0c;吃透了知识点的话…

马丽离开沈腾,独自闪耀,实力证明一切。

♥ 为方便您进行讨论和分享&#xff0c;同时也为能带给您不一样的参与感。请您在阅读本文之前&#xff0c;点击一下“关注”&#xff0c;非常感谢您的支持&#xff01; 文 |猴哥聊娱乐 编 辑|徐 婷 校 对|侯欢庭 马丽的事业突飞猛进&#xff0c;演艺之路从与沈腾的默默搭档到…

windows Server下Let‘s Encrypt的SSL证书续期

一、手动续期方法&#xff1a; 暂停IIS服务器 --> 暂时关闭防火墙 --> 执行certbot renew --> 打开防火墙 --> 用OpenSSL将证书转换为PFX格式-->pfx文件导入到IIS --> IIS对应网站中绑定新证书 --> 重新启动IIS -->完成 1、暂停IIS服务器 2、暂时关闭…

如何将QQ音乐的歌单导出到excel

一、提前准备 1.选择你需要导出的音乐歌单 2.得到你的歌单ID 1、首先打开QQ音乐&#xff0c;找到想要查看的歌单&#xff0c;点击歌单右上角的更多按钮。 2、其次在弹出的菜单中选择分享&#xff0c;在分享页面中&#xff0c;选择歌单分享。 3、最后在分享页面中&#xff0c…

【Docker 的安装:centos】

文章目录 1 :peach:各版本平台支持情况:peach:2 :peach:CentOS 安装:peach:2.1 :apple:安装依赖:apple:2.2 :apple:安装 Docker:apple:2.3 :apple:实战经验:apple:2.3.1 :lemon:Docker 镜像源修改:lemon:2.3.2 :lemon:Docker 目录修改:lemon: 1 &#x1f351;各版本平台支持情况…