129 验证二叉搜索树

问题描述:给定一个二叉树,判断其是否是一个有效的二叉搜索树,假设一个二叉搜索树具有以下特征:节点的左子树质保函小于当前节点的数,节点的右子树质保函大于当前节点的数,所有左子树和右子树本身也是二叉搜索树。

中序遍历求解:对于一颗二叉搜索树而言,其中序遍历结果是有序的。

递归方式求解:定义一个全局的变量用于存储之前访问的那个元素,只要中序遍历过程中小于这个值的话,则表明不是二叉搜索树,若大于这个pre,则更新pre,并进入下一次递归。

int pre=Integer.MIN_VALUE;
public Boolean isBinarySearch(TreeNode root)
{
if(root==null){return true;}
Boolean left=isBinarySearch(root.left);
if(left==false){return false;}
if(root.val<pre){return false;}
else
{
pre=root.val;
return isBinarySearch(root.right);
}
}
public Boolean IsBinarySearch(TreeNode root)
{
return isBinarySearch(root);
}

将所有的结果都放入链表中,最后来判断该链表是否是递增的,若是则返回true,若不是,则返回false。

public void isBinarySearch(TreeNode root,List<TreeNode>list)
{
if(root==null){return;}
isBinarySearch(root.left,list);
list.add(root);
isBinarySearch(root.right.list);
}
public Boolean IsBinarySearch(TreeNode root)
{List<TreeNode>list=new LinkedList<>();
isBinarySearch(root,list);
int pre=list.get(0).val;
for(int i=1;i<list.size();i++)
{
if(list.get(i).val<pre){return false;}
else
{
pre=list.get(i).val;
}
}
​​​​​​​return true;
}

递归求解:通过一层层的遍历每个节点逐一判断

public Boolean isBinarySearch(TreeNode root)
{
if(root.left==null&&root.right==null){return true;}
else if(root.left==null&&root.right!=null)
{
if(root.right.val<root.val){return false;}
else{
return isBinarySearch(root.right);
}else if(root.left!=null&&root.right==null)
{
if(root.left.val>root.val){return false;}
else{
return isBinarySeach(roo.left);
}}else
{
if(!(root.left<root.val&&root.right>root.val)){return false;}
else
{
return isBinarySearch(roo.left)&&isBinarySearch(root.right);
​​​​​​​}}
}
}

非递归方式使用栈来求解,后进栈的先处理,符合树的求解过程,

public Boolean isBinarySearch(TreeNode root)
{
TreeNode pre;
pre.val=Integer.MIN_VALUE;
Stack<TreeNode>stack=new Stack<>();
TreeNode current=root;
while(current!=null||stack!=null)
{
while(current!=null){stack.push();current=current.left;}
current=statck.pop();
if(current.val<pre.val){return false;}
else{
pre=current;
current=current.right;
}
}
​​​​​​​return true;
}

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

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

相关文章

rpc跨平台通信的简单案例,java和go

当我们使用Go和Java进行RPC&#xff08;Remote Procedure Call&#xff0c;远程过程调用&#xff09;跨平台通信时&#xff0c;你可以使用gRPC作为通信框架。gRPC是一个高性能、开源的RPC框架&#xff0c;它支持多种编程语言&#xff0c;包括Go和Java。下面我将为你提供一个简单…

1.21寒假集训

A: 解题思路&#xff1a; 判断改变第一个&#xff0c;后面字符根据前一个字符判断是否改变 判断改变第二个&#xff0c;同上&#xff0c;找到最小改变值。 下面是c代码&#xff1a; #include<iostream> using namespace std; int main() {string s,s1,s2;int sum1 0…

Python sleep函数用法:线程睡眠

如果需要让当前正在执行的线程暂停一段时间&#xff0c;并进入阻塞状态&#xff0c;则可以通过调用 time 模块的 sleep(secs) 函数来实现。该函数可指定一个 secs 参数&#xff0c;用于指定线程阻塞多少秒。 当前线程调用 sleep() 函数进入阻塞状态后&#xff0c;在其睡眠时间…

【Web】CTFSHOW 文件上传刷题记录(全)

期末考完终于可以好好学ctf了&#xff0c;先把这些该回顾的回顾完&#xff0c;直接rushjava&#xff01; 目录 web151 web152 web153 web154-155 web156-159 web160 web161 web162-163 web164 web165 web166 web167 web168 web169-170 web151 如果直接上传php文…

workflow源码解析:http客户端(一)

1、 示例程序 程序从stdin读取http/https URL&#xff0c;抓取网页并把内容打印到stdout&#xff0c;并将请求和响应的http header打印在stderr。 为了简单起见&#xff0c;程序用Ctrl-C退出&#xff0c;但会保证所有资源先被完全释放。 #include <signal.h> #include …

LeetCode 105. 从前序与中序遍历序列构造二叉树

105. 从前序与中序遍历序列构造二叉树 给定两个整数数组 preorder 和 inorder &#xff0c;其中 preorder 是二叉树的先序遍历&#xff0c; inorder 是同一棵树的中序遍历&#xff0c;请构造二叉树并返回其根节点。 示例 1: 输入: preorder [3,9,20,15,7], inorder [9,3,15,…

【二叉树练习2】

文章目录 判断是否是完全二叉树找出p和q的最近的公共祖先非递归实现前序遍历非递归实现中序遍历非递归实现后序遍历 判断是否是完全二叉树 boolean isCompleteTree(TreeNode root){if (root null){return true;}//创建队列Queue<TreeNode> queue new LinkedList<>…

Restify快速上手

文章目录 Restify简介1. Restify是什么&#xff1f;2. 安装Restify3. 实现一个最简单的服务器 处理程序链1. 什么是处理程序链2. next()函数3. 三类处理程序链3.1. 通用预处理程序链&#xff1a;pre3.2. 通用处理程序链&#xff1a;use3.3. 路由处理程序链 4. 错误处理 插件1. …

从一到无穷大 #21 从基于多数据模型分析负载的Benchmark讨论多模数据库的发展方向

本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。 本作品 (李兆龙 博文, 由 李兆龙 创作)&#xff0c;由 李兆龙 确认&#xff0c;转载请注明版权。 文章目录 引言M2Bench测试结果从Lindorm看待多模的发展方向总结 引言 《M2Bench: A Database …

代码随想录算法训练营第五十三天| 1143.最长公共子序列、1035.不相交的线、53.最大子序和动态规划

代码随想录算法训练营第五十三天| 1143.最长公共子序列、1035.不相交的线、53.最大子序和动态规划 题目 1143.最长公共子序列 给定两个字符串 text1 和 text2&#xff0c;返回这两个字符串的最长 公共子序列 的长度。如果不存在 公共子序列 &#xff0c;返回 0 。 一个字符…

【手撕C语言 第六集】函数(上)

文章目录 一、函数是什么&#xff1f;二、C语言中函数的分类&#xff1a;1.库函数1.1 如何学会使用库函数&#xff1f; 2. 自定义函数 三、函数的参数1.实际参数&#xff08;实参&#xff09;&#xff1a;2.形式参数&#xff08;形参&#xff09;&#xff1a; 四、函数的调用&a…

P2717 寒假作业 CDQ

寒假作业 传送门 题目背景 zzs 和 zzy 正在被寒假作业折磨&#xff0c;然而他们有答案可以抄啊。 题目描述 他们共有 n n n 项寒假作业。zzy 给每项寒假作业都定义了一个疲劳值 a i a_i ai​&#xff0c;表示抄这个作业所要花的精力。 zzs 现在想要知道&#xff0c;有多…

Laravel 开发中总结的一些方式方法

1、最大限度地使用你的 .env 文件; 2、不要破坏框架核心&#xff0c;不要编辑 vendor 文件夹中的文件&#xff0c;你可以选择继承相关函数来实现。扩展优于修改 3、不要直接通过 PHPMyAdmin 或者其他数据库控制台创建表和索引。请使用数据库迁移表来创建表、增加修改字段&…

sqlserver2012 跨服务器查询

在 SQL Server 2012 中&#xff0c;跨服务器查询可以通过链接服务器来实现。以下是执行跨服务器查询的步骤&#xff1a; 创建链接服务器&#xff1a; 首先&#xff0c;你需要在 SQL Server 2012 上创建一个链接服务器对象。可以使用系统存储过程 sp_addlinkedserver 来完成这一…

spring refresh

preareRefresh&#xff1a;刷新前的工作准备 obtainFreshBeanFactory&#xff1a;获取子类刷新后的内部beanFactory实列 prepareBeanFactory&#xff1a;为容器注册必要的系统级别bean postProcessBeanFactory&#xff1a;允许容器的子类注册postProcessor invokeBeanFacto…

JS加密/解密之一个少见的js解密

直接上源代码 (function(){var tfK,EAc715-704;function JQI(d){var q514800;var yd.length;var i[];for(var v0;v<y;v){i[v]d.charAt(v)};for(var v0;v<y;v){var pq*(v245)(q%31355);var eq*(v264)(q%20133);var kp%y;var oe%y;var mi[k];i[k]i[o];i[o]m;q(pe)%3352359…

【漏洞复现】Hikvision综合安防管理平台config信息泄露漏洞

Nx01 产品简介 Hikvision&#xff08;海康威视&#xff09;是一家在中国颇具影响力的安防公司&#xff0c;其网络摄像头产品在市场上占据了相当大的份额。综合安防管理平台基于“统一软件技术架构”理念设计&#xff0c;采用业务组件化技术&#xff0c;满足平台在业务上的弹性扩…

本地cuda的部署方式

1首先在终端利用命令ndivia-smi查看自己的驱动版本和cuda version 查看是否匹配&#xff08;或者有没有安装cuda&#xff09; 查看是否匹配&#xff1a;知乎 - 安全中心 安装cuda&#xff1a;知乎 - 安全中心 2搞定cuda之后&#xff0c;就要安装与cuda相对应的pytorch版本。…

关于程序员的未来的这件事情,我是这么看的!

关于程序员的未来在哪里&#xff1f;很多想做程序员以及已经入坑的程序员都想知道&#xff0c;我作为一名工龄超过12年的资深大龄程序员&#xff0c;我其实也想知道&#xff0c;我也没办法确定程序员的未来在哪里。 或者我也不知道&#xff0c;为什么互联网当初招聘那么多的程…

【RL】(task2)策略梯度算法

note 文章目录 note一、策略梯度算法二、策略梯度算法的优缺点时间安排Reference 一、策略梯度算法 策略梯度&#xff08;Policy Gradient&#xff09;算法是一类用于解决强化学习问题的算法&#xff0c;它通过直接对策略进行参数化&#xff0c;并利用梯度上升的方法来优化策略…