Morris遍历--验证二叉搜索树(java)

Morris遍历-

  • 验证二叉搜索树
    • 题目描述
    • Morris 遍历解题
    • 代码演示:
  • morris 遍历改写后序遍历

验证二叉搜索树

来源:力扣(LeetCode)
链接:https://leetcode.cn/problems/validate-binary-search-tree

题目描述

给你一个二叉树的根节点 root ,判断其是否是一个有效的二叉搜索树。
有效 二叉搜索树定义如下:
节点的左子树只包含 小于 当前节点的数。
节点的右子树只包含 大于 当前节点的数。
所有左子树和右子树自身必须也是二叉搜索树。

示例1:
在这里插入图片描述
输入:root = [2,1,3]
输出:true

示例2:
在这里插入图片描述
输入:root = [5,1,4,null,null,3,6]
输出:false
解释:根节点的值是 5 ,但是右子节点的值是 4 。

Morris 遍历解题

不了解morrisb遍历的可以看遍历二叉树的神级方法–Morris遍历
采用morris 遍历的好处就是,时间复杂度是O(n) 空间复杂度是O(1).和递归遍历树的好处就是,节省了空间,但是造成代码更复杂,流程也更复杂了,因此这当做一个扩展知识,

首先我们知道搜索二叉树,满足在中序遍历时是递增的,因为中序遍历顺序是左头右的顺序,刚好满足搜索树的递增条件,
因此解决用morris 遍历解决这个题,只需要在morris 遍历时,构造出中序遍历,就可以判断了,
morris 遍历改写前序和中序遍历可以查看
二叉树Morris遍历改写成前序遍历和中序遍历

代码演示:

/*** Definition for a binary tree node.* public class TreeNode {*     int val;*     TreeNode left;*     TreeNode right;*     TreeNode() {}*     TreeNode(int val) { this.val = val; }*     TreeNode(int val, TreeNode left, TreeNode right) {*         this.val = val;*         this.left = left;*         this.right = right;*     }* }*/
class Solution {public boolean isValidBST(TreeNode root) {if (root == null){return true;}TreeNode cur = root;TreeNode mostRight = null;Integer pre = null;boolean ans = true;while (cur != null){mostRight = cur.left;if (mostRight != null){while (mostRight.right != null && mostRight.right != cur){mostRight = mostRight.right;}if (mostRight.right == null){mostRight.right = cur;cur = cur.left;continue;}else{mostRight.right = null;}}if (pre != null && pre >= cur.val){ans = false;}pre = cur.val;cur = cur.right;}return ans;}
}

morris 遍历改写后序遍历

二叉树Morris遍历改写成后序遍历

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

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

相关文章

Mybatis中表关系查询结果集映射

文章目录 前言1. 实体类设计1.1 用户表1.2 地址表1.3 博客表1.4 粉丝互关表 2.插入数据3.表关联查询3.1 一对一关系3.2 一对多关系3.3 多对多关系 前言 resultMap 元素是 MyBatis 中最重要最强大的元素。它可以让你从 90% 的 JDBC ResultSets 数据提取代码中解放出来&#xff…

IMU+激光雷达实现大规模动作捕捉

VR技术的兴起,使得动作捕捉这门让人们可以使用肢体语言在虚拟世界中进行互动和交流的技术逐渐成为热门。随着科技的进步,如今的动作捕捉技术已经十分成熟,但在大规模场景中准确地捕捉人体运动仍然具有挑战性。它对于体育大型赛事、舞台表演、…

WPF Prims框架详解

文章目录 前言Prism基本使用Prism选择,DryIoc还是UnityPrism基本框架搭建Prism动态更新View和ViewModel对应关系参数动态更新函数动态绑定 prism新建项目模板region使用事例测试是否限制空间 消息订阅如何使用消息订阅使用建议 路由导航对话框/弹窗功能实现代码 前言…

C#开发的OpenRA游戏之维修按钮

C#开发的OpenRA游戏之维修按钮 前面分析物品的变卖按钮,如果理解这个流程,再看其它按钮的流程,其实是一样的,所以前面的文章是关键,只有理解通透的基础之上,才能继续往下。 维修按钮的存在价值,就是当建筑物受到敌方破坏,还没有完全倒掉之前,可以使用金币来进行修理。…

Redis学习(四)Redis原理:底层数据结构、网络模型、内存回收策略

文章目录 Redis底层数据结构SDS 动态字符串IntSet 整数集合Dict 字典Dict伸缩中的渐进式再哈希 ZipList 压缩列表QuickLisk 快速列表SkipList 跳表动态索引建立 RedisObject变量类型与数据结构实现StringListSetZSetHash Redis网络模型Redis是单线程还是多线程?为什…

用vscode远程连接Linux服务器后,如何创建自己的账号

1. 打开终端(Terminal)窗口 2. 在终端中创建新的用户账号 (假设您要创建的用户名为 “newuser”),在命令执行期间,需要提供新用户的密码。按照提示进行操作。 先输入登录的管理员账号密码。 再输入创建的…

CMS系统访问权限限制

创建一些全局的通用方法 const USER_KEY "USER_KEY" const TOKEN_KEY "JWT_TOKEN_KEY"class Auth {constructor() {this.token nullthis.user nullthis.token localStorage.getItem(TOKEN_KEY)const userJson localStorage.getItem(USER_KEY)if (use…

大华监控前端实时预览(踩坑)

难点在后端,前端主要是文档太少了,前端难点主要是接入摄像头,摄像头接入了,剩下什么对讲、调整方向、变焦之类的就简单了。 大华官网:https://open-icc.dahuatech.com/#/home 1.到官网下载插件或者demo,我是…

SpringBoot + WebSocket+STOMP指定推送消息

目录 一、前提条件1.2 环境要求1.3 依赖 二、相关工具类准备2.1 发送消息载体2.2 接收消息载体2.3 消息处理接口2.4 为 STOMP 消息传递配置 Spring 三、前端部分四、效果 一、前提条件 本文将简单的描述SpringBoot WebSocketSTOMP指定推送消息场景,不包含信息安全加…

实时监测与报警,探索CMS系统在半导体设备安全管理中的作用

在半导体制造行业,设备的安全管理对于保障生产运行和员工安全至关重要。中央设备状态监控系统CMS(central monitoring system)是一种关键的解决方案,为企业提供实时监测和报警功能,有效应对设备安全管理的挑战。本文将…

网页动态表单 ,网页动态参数

有的时候因为参数太多 无法 一一 创建 所有采用动态创建 自己遇到的一个实际情况今天写个例子 <!DOCTYPE html> <html><head><meta charset"UTF-8"><title>form demo</title><link rel"stylesheet" href&quo…

Vit 实战营 Class2:图像与Transformer基础

文章目录 数组图像&#xff1a;图像与像素图像分类&#xff1a;机器如何学习&#xff1f;NMT&#xff1a;Neuron Machine TranslationTransformerVision Transformer代码实战 数组图像&#xff1a;图像与像素 什么是数字图像&#xff1f;在计算机图像的图像格式。每一个点叫pix…