代码随想录二刷 |二叉树 | 验证二叉搜索树

代码随想录二刷 |二叉树 | 验证二叉搜索树

  • 题目描述
  • 解题思路
    • 递归法
    • 迭代法
  • 代码实现
    • 递归法
    • 迭代法

题目描述

98.验证二叉搜索树

给定一个二叉树,判断其是否是一个有效的二叉搜索树。

假设一个二叉搜索树具有如下特征:

  • 节点的左子树只包含小于当前节点的数。
  • 节点的右子树只包含大于当前节点的数。
  • 所有左子树和右子树自身必须也是二叉搜索树。
    在这里插入图片描述

解题思路

在中序遍历下,输出的二叉搜索树节点的数值是有序序列。

有了这个特性,验证二叉搜索树,就相当于变成了判断一个序列是不是递增的了。

递归法

通过中序遍历将二叉搜索树转变为一个数组:

vector<int> vec;
void traversal(TreeNode* root) {if (root == NULL) return;traversal(root->left);vec.push_back(root->val);traversal(root->right);
}

然后只要比较一下这个数组是否是有序的即可:

traversal(root);
for (int i = 0; i< veec.size(); i++) {if (vec[i] <= vec[i - 1]) return false;
}
return true;

迭代法

迭代法中序遍历稍加改动即可。

需要注意这道题目有两个陷阱。

第一个陷阱是,不能单纯的比较左节点小于中间节点,右节点大于中间节点就完事了。我们要比较的是 左子树所有节点小于中间节点,右子树所有节点大于中间节点。

样例中最小节点 可能是int的最小值,如果这样使用最小的int来比较也是不行的。

此时可以初始化比较元素为longlong的最小值。

代码实现

递归法

class Solution {
private:vector<int> vec;void traversal(TreeNode* root) {if (root == NULL) return;traversal(root->left);vec.push_back(root->val); // 将二叉搜索树转换为有序数组traversal(root->right);}
public:bool isValidBST(TreeNode* root) {vec.clear(); // 不加这句在leetcode上也可以过,但最好加上traversal(root);for (int i = 1; i < vec.size(); i++) {// 注意要小于等于,搜索树里不能有相同元素if (vec[i] <= vec[i - 1]) return false;}return true;}
};

迭代法

class Solution {
public:bool isValidBST(TreeNode* root) {stack<TreeNode*> st;TreeNode* cur = root;TreeNode* pre = NULL:while (cur != NULL || !st.empty()) {st.push(cur);cur = cur->left;} else {cur = st.top();st.pop();if (pre != NULL && cur->val <= pre->val)return false;pre = cur;cur = cur->right;}}return true;
};

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

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

相关文章

Eureka的自我保护机制

一&#xff1a;Eureka的自我保护机制是什么&#xff1f; 保护模式主要用于一组客户端和Eureka Server之间存在网络分区场景下的保护。一旦进入保护模式&#xff0c;Eureka Server将会尝试保护其服务注册表中的信息&#xff0c;不再删除服务注册表中的数据&#xff0c;也就是不…

关于电脑屏幕亮度的调整,看这篇文章就够了

你可能需要定期更改屏幕亮度。当外面很亮的时候,你想把它调大,这样你就能看到。当你在黑暗的房间里时,你会希望它变暗,这样就不会伤害你的眼睛。降低屏幕亮度也有助于节省电力并延长笔记本电脑的电池寿命。 除了手动更改屏幕亮度外,Windows还可以通过多种方式自动更改屏幕…

ROS-Ubuntu20.04安装noetic

ROS-Ubuntu20.04环境安装 1.系统和ROS版本 操作系统&#xff1a;Ubuntu20.04 ROS版本&#xff1a;ROS noetic 2.安装步骤 1.配置ROS软件源 sudo sh -c echo "deb http://packages.ros.org/ros/ubuntu $(lsb_release -sc) main" > /etc/apt/sources.list.d/r…

Pytorch常用的函数(六)常见的归一化总结(BatchNorm/LayerNorm/InsNorm/GroupNorm)

Pytorch常用的函数(六)常见的归一化总结(BatchNorm/LayerNorm/InsNorm/GroupNorm) 常见的归一化操作有&#xff1a;批量归一化&#xff08;Batch Normalization&#xff09;、层归一化&#xff08;Layer Normalization&#xff09;、实例归一化&#xff08;Instance Normaliza…

【React系列】React生命周期、setState深入理解、 shouldComponentUpdate和PureComponent性能优化、脚手架

本文来自#React系列教程&#xff1a;https://mp.weixin.qq.com/mp/appmsgalbum?__bizMzg5MDAzNzkwNA&actiongetalbum&album_id1566025152667107329) 一. 生命周期 1.1. 认识生命周期 很多的事物都有从创建到销毁的整个过程&#xff0c;这个过程称之为是生命周期&…

【华为OD机试真题 JavaScript】项目排期|解题思路、代码解析

文章目录 题目描述输入输出示例1输入输出说明解题思路实现代码题目描述 项目组共有N个开发人员,项目经理接到了M个独立的需求,每个需求的工作量不同,且每个需求只能由一个开发人员独立完成,不能多人合作。假定各个需求直接无任何先后依赖关系,请设计算法帮助项目经理进行…

案例分析——如何优化跨境直播网络

跨境直播 风口已至 这些年越来越多商家加入直播带货行列&#xff0c;各种玩法日渐成熟。而TikTok作为当前国外最火爆的直播平台&#xff0c;不少卖家都会定期做TikTok直播引流&#xff0c;但时常会面临着远程访问导致直播画面模糊、卡顿掉线、延迟高&#xff0c;甚至可能限流黑…

Django 4.2.7 ORM 连接MySQLServer 完成单表CRUD

文章目录 Django ORM介绍1.使用pycharm新建一个Django项目2.修改settings.py文件中 DATABASES3.创建APP4.创建模型5.操作数据库 Django ORM介绍 Django 模型使用自带的 ORM。 对象关系映射&#xff08;Object Relational Mapping&#xff0c;简称 ORM &#xff09;用于实现面向…

C++ Trie树模版 及模版题 || Trie字符串统计

Trie树&#xff1a;用来高效的存储和查找字符串集合的数据结构。 维护一个字符串集合&#xff0c;支持两种操作&#xff1a; I x 向集合中插入一个字符串 x &#xff1b; Q x 询问一个字符串在集合中出现了多少次。 共有 N 个操作&#xff0c;所有输入的字符串总长度不超过 1…

vue2打包后,接口地址可在打包文件中配置

项目中遇到一个需要&#xff0c;打包后的项目需要部署到多个服务器&#xff0c;所以每次打包都需要修改环境变量的api的接口&#xff0c;先需要直接在打包文件中修改&#xff0c;不用每次都重新打包&#xff1a; 1.在public下创建config文件&#xff1a; window.apiConfig{&q…

OpenHarmony内存泄漏指南 - 解决问题(综合)

本系列文章旨在提供定位与解决OpenHarmony应用与子系统内存泄露的常见手段与思路&#xff0c;将会分成几个部分来讲解。首先我们需要掌握发现内存泄漏问题的工具与方法&#xff0c;以及判断是否可能存在泄漏。接着需要掌握定位泄漏问题的工具&#xff0c;以及抓取trace、分析tr…

Golang : Bson\Json互转

代码 package bson_jsonimport ("encoding/json""errors""fmt""gopkg.in/mgo.v2/bson""os""testing" )type User struct {Name string json:"name,omitempty" bson:"name,omitempty"CSD…

解密威胁:应对.faust勒索攻击的实用解决方案

引言&#xff1a; 在数字犯罪的舞台上&#xff0c;.faust勒索病毒以其狡猾的特征而备受瞩目&#xff0c;其中最为引人注目的之一是其对文件扩展名的变革。这种诡异的舞蹈不仅是攻击者的标志&#xff0c;更是对受害者数据的无情捉弄。本节将深入研究.faust勒索病毒对文件扩展名…

GDB调试技巧实战--chatGPT辅助考察strace原理

想法 本想写一篇strace代码解读的帖子,但是市面上已经有很多介绍strace原理的文章。就不重复造轮子了。还是授人以鱼不如授人以渔,讲讲如何利用GDB+ChatGPT辅助通过实践理解strace主要程序流吧。 既然strace的主要原理是利用ptrace系统函数控制tracee(被调试者) 及 wait4等…

回溯算法part03 算法

回溯算法part03 算法 今日任务 ● 39. 组合总和 ● 40.组合总和II ● 131.分割回文串 1.leetcode 39. 组合总和 https://leetcode.cn/problems/combination-sum/ class Solution {List<List<Integer>> resultnew ArrayList<>();List<Integer> pat…

JS函数调用的this指向与apply,call,bind调用模式

1、函数调用的四种模式与this指向 普通函数调用&#xff1a;this指向全局对象对象方法调用&#xff1a;this指向该调用的对象构造函数调用&#xff1a;this指向构造函数new的对象call,apply和bind间接调用&#xff1a;显式绑定this&#xff0c;传入的第一个参数绑定的对象 2、…

静态网页设计——天行九歌(HTML+CSS+JavaScript)(dw、sublime Text、webstorm、HBuilder X)

前言 声明&#xff1a;该文章只是做技术分享&#xff0c;若侵权请联系我删除。&#xff01;&#xff01; 感谢大佬的视频&#xff1a;https://www.bilibili.com/video/BV1de411m7y4/?vd_source5f425e0074a7f92921f53ab87712357b 源码&#xff1a;https://space.bilibili.com…

java回溯算法、最短路径算法、最小生成树算法

回溯算法 回溯算法实际上一个类似枚举的搜索尝试过程&#xff0c;主要是在搜索尝试过程中寻找问题的解&#xff0c;当发现已不满足求解条件时&#xff0c;就“回溯”返回&#xff0c;尝试别的路径。 最短路径算法 从某顶点出发&#xff0c;沿图的边到达另一顶点所经过的路径中…

高通开发系列 - toolchain交叉编译器编译kernel以及生成boot镜像

By: fulinux E-mail: fulinux@sina.com Blog: https://blog.csdn.net/fulinus 喜欢的盆友欢迎点赞和订阅! 你的喜欢就是我写作的动力! 返回:专栏总目录 目录 背景概述分析过程generate_defconfig.sh脚本环境准备合并其他几个配置文件开始编译生成dtb镜像

【Python】Excles横向merge合并到一个sheet中

将文件夹内的多个excel合并在一个excel的一个sheet中&#xff0c;按照列“X”和列“Y”进行横向merge。 import os import pandas as pd# 设置文件夹路径 folder_path rD:\itm\excle# 获取文件夹下所有的 Excel 文件 all_files os.listdir(folder_path) excel_files [f for…