当前位置: 首页 > news >正文

力扣labuladong一刷day35天

力扣labuladong一刷day35天

文章目录

      • 力扣labuladong一刷day35天
      • 一、98. 验证二叉搜索树
      • 二、700. 二叉搜索树中的搜索
      • 三、701. 二叉搜索树中的插入操作
      • 四、450. 删除二叉搜索树中的节点

一、98. 验证二叉搜索树

题目链接:https://leetcode.cn/problems/validate-binary-search-tree/
思路:校验二叉搜索树的合法性,简单的想法直接遍历判断左右孩子与父节点值的关系即可,但是有时候会出现问题,如何 10 -> { 5, 15-> {6, 20} }。看似都满足,其实不是的,6归属于10的右子树,但是却比10小,这也就是说每一个root只管的了他的左右孩子,但没法把约束root的信息传递给左右孩子,所以我们在遍历的时候就要携带上root的约束范围向下传递。也就是说从上往下遍历的过程中记录好每一个节点的约束范围。

class Solution {public boolean isValidBST(TreeNode root) {return isValidBST(root, null, null);}boolean isValidBST(TreeNode root, TreeNode min, TreeNode max) {if (root == null) return true;if (min != null && root.val <= min.val) return false;if (max != null && root.val >= max.val) return false;return isValidBST(root.left, min, root) && isValidBST(root.right, root, max);}
}

二、700. 二叉搜索树中的搜索

题目链接:https://leetcode.cn/problems/search-in-a-binary-search-tree/
思路:在二叉搜索树中搜索值,只需要利用二叉搜索树的特性,val<root.val 去左子树进行搜索,val>root.val去右子树搜索 val == root.val 返回。

class Solution {public TreeNode searchBST(TreeNode root, int val) {if (root == null) return null;if (val < root.val) return searchBST(root.left, val);if (val > root.val) return searchBST(root.right, val);return root;}
}

三、701. 二叉搜索树中的插入操作

题目链接:https://leetcode.cn/problems/insert-into-a-binary-search-tree/
思路:对于二叉搜索树的插入和查询思路是类似的,左右判断一路向下搜索,为node == null就找到了位置new 新节点返回就是。

class Solution {public TreeNode insertIntoBST(TreeNode root, int val) {if (root == null) return new TreeNode(val);if (val < root.val) {root.left = insertIntoBST(root.left, val);}if (val > root.val) {root.right = insertIntoBST(root.right, val);}return root;}
}

四、450. 删除二叉搜索树中的节点

题目链接:https://leetcode.cn/problems/delete-node-in-a-bst/
思路:其实对于二叉搜索树的查找、新增、修改都是一样的思路,对于删除却不一样,有3中可能性,①、要删除节点为叶子节点。②、要删除节点只有一个孩子节点。③、要删除节点有两个孩子节点。
①、直接返回null
②、返回另一个非空的孩子节点。
③、有两种删除方法,可以拿当前节点的左子树中最大值(即一路p=p.right)进行交换,然后递归删除,也可以拿当前节点的右子树中的最小值(即一路p=p.left)进行交换,然后递归删除。

class Solution {public TreeNode deleteNode(TreeNode root, int key) {if (root == null) return null;if (key == root.val) {if (root.left == null && root.right == null) return null;if (root.left == null && root.right != null) return root.right;if (root.left != null && root.right == null) return root.left;TreeNode p = root.right;while (p.left != null) {p = p.left;}root.val = p.val;root.right = deleteNode(root.right, root.val);} else if (key < root.val) {root.left = deleteNode(root.left, key);}else {root.right = deleteNode(root.right, key);}return root;}
}
http://www.lryc.cn/news/257078.html

相关文章:

  • Matlab 曲线动态绘制
  • Spark DataFrame和Dataset使用例子
  • CSS彩色发光液体玻璃
  • OpenGLES:glReadPixels()获取相机GLSurfaceView预览数据并保存
  • 小红书蒲公英平台开通后,有哪些注意的地方,以及如何进行报价?
  • 持续集成交付CICD:Jenkins配置Nexus制品上传流水线
  • C语言笔试例题_指针专练30题(附答案解析)
  • 【Vue+Python】—— 基于Vue与Python的图书管理系统
  • 智能成绩表 - 华为OD统一考试(C卷)
  • 【基于ESP32无线蓝牙上传电脑Excel透传数据】
  • Qt篇——QChartView实现鼠标滚轮缩放、鼠标拖拽平移、鼠标双击重置缩放平移、曲线点击显示坐标
  • 掌握VUE中localStorage的使用
  • 所有行业的最终归宿-我有才打造知识付费平台
  • 图的深度和广度优先遍历
  • 计算机毕业设计JAVA+SSM+springboot养老院管理系统
  • Flutter路由的几种用法
  • 力扣119双周赛
  • Redux,react-redux,dva,RTK
  • 基于Java SSM框架实现高校信息资源共享平台系统【项目源码+论文说明】计算机毕业设计
  • SpringMvc入坑系列(一)----maven插件启动tomcat
  • Leetcode—337.打家劫舍III【中等】
  • 列表标签的介绍与使用
  • 浅谈什么是语音芯片的白噪音支持功能:打造舒适家居与优质音频体验
  • 【QED】高昂的猫 Ⅰ
  • Redis如何做内存优化?
  • 倪海厦:教你正确煮中药,发挥最大药效
  • C++学习笔记:继承
  • 音频/视频、信息和通信技术设备安全标准UL62368-1
  • macos下安装科研绘图软件Origin
  • 安全快速地删除 MySQL 大表数据并释放空间