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

双非本科准备秋招(22.1)—— 力扣二叉搜索树

1、98. 验证二叉搜索树

        中序遍历的非递归实现,我们中序遍历二叉搜索树,得到的结果一定是递增的,否则就不是二叉搜索树。

class Solution {public boolean isValidBST(TreeNode root) {//中序LinkedList<TreeNode> stack = new LinkedList<>();LinkedList<TreeNode> list = new LinkedList<>();while(!stack.isEmpty() || root != null){if(root != null){stack.push(root);root = root.left;}else{TreeNode t = stack.pop();list.add(t);root = t.right;}}for(int i = 0; i < list.size()-1; i++){if(list.get(i).val >= list.get(i+1).val){return false;}}return true;}
}

2、938. 二叉搜索树的范围和

        改造一下前序遍历,最后一个参数sum就是和,判断node.val的值是否在范围内,如果在范围内,那么就累加到sum中,然后再让sum加上左右子树的sum值即可。

class Solution {public int rangeSumBST(TreeNode root, int low, int high) {return preOrder(root, low, high, 0);}public int preOrder(TreeNode node, int low, int high, int sum){if(node == null){return 0;}if(node.val >= low && node.val <= high){sum += node.val;}sum += preOrder(node.left, low, high, 0) + preOrder(node.right, low, high, 0);return sum;}
}

3、1008. 前序遍历构造二叉搜索树

        遍历一下数组,每次都把这个值按照二叉搜索树的性质加入树中。先在树中搜索这个节点的值,因为题目保证不重复,所以肯定搜不到,此时 的位置就是待插入的位置,parent是 t 的父节点,如果parent是null,说明为空树,那么root=parent。

        然后,将值跟parent的左右子树的val作比较,小于就加在parent左边,大于就加在parent右边。

class Solution {public TreeNode bstFromPreorder(int[] preorder) {TreeNode root = null;for(int i = 0; i < preorder.length; i++){TreeNode t = root;TreeNode parent = null;int val = preorder[i];while(t != null){parent = t;if(val < t.val){t = t.left;}else if(t.val < val){t = t.right;}}TreeNode node = new TreeNode(val);if(parent == null) {root = node;}else if(val < parent.val){parent.left = node;}else if(val > parent.val){parent.right = node;}}return root;}
}

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

        要求返回任意二者的最小绝对查,考虑二叉搜索树的性质,如果我们中序遍历,那么遍历的结果一定是升序的,所以最小绝对差肯定是在中序遍历结果的两两之差中找。

        直观的想法就是遍历一遍加入数组,再遍历一遍数组。

        可以优化一下,定义一个全局TreeNode为pre,默认是null,每次操作完之后,都重新记录一下pre的值,这样我们就能得到之前和现在的节点了。

class Solution {int ans = Integer.MAX_VALUE;TreeNode pre = null;public int getMinimumDifference(TreeNode root) {inOrder(root);return ans;}void inOrder(TreeNode root){if(root == null) return;inOrder(root.left);if(pre != null){ans = Math.min(ans, Math.abs(pre.val - root.val));}pre = root;inOrder(root.right);}
}

相关文章:

  • Java面试题2024(Java面试八股文)
  • 简化版SpringMVC
  • 异地电脑文件夹共享吗?
  • 使用PDFBox实现pdf转其他图片格式
  • MYSQL笔记:约束条件
  • 【LangChain-04】利用权重和偏差跟踪和检查LangChain代理的提示
  • 国产三维剖面仪—MPAS-100相控参量阵浅地层剖面仪
  • C++单例模式详解
  • 部署tomcat
  • 这种学习单片机的顺序是否合理?
  • 牛客网SQL进阶127: 月总刷题数和日均刷题数
  • Kafka 使用手册
  • 获取视频帧图片
  • Spring Boot配置文件优先级
  • 贪心算法的应用
  • 深入了解以太坊
  • [LeetCode] Wiggle Sort
  • 【跃迁之路】【641天】程序员高效学习方法论探索系列(实验阶段398-2018.11.14)...
  • 230. Kth Smallest Element in a BST
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • java第三方包学习之lombok
  • MYSQL 的 IF 函数
  • Node项目之评分系统(二)- 数据库设计
  • ReactNativeweexDeviceOne对比
  • Vue实战(四)登录/注册页的实现
  • zookeeper系列(七)实战分布式命名服务
  • 动态规划入门(以爬楼梯为例)
  • 多线程 start 和 run 方法到底有什么区别?
  • 翻译:Hystrix - How To Use
  • 分布式任务队列Celery
  • 什么软件可以提取视频中的音频制作成手机铃声
  • 微信小程序实战练习(仿五洲到家微信版)
  • 线上 python http server profile 实践
  • 一些css基础学习笔记
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • #laravel 通过手动安装依赖PHPExcel#
  • #pragma预处理命令
  • $.extend({},旧的,新的);合并对象,后面的覆盖前面的
  • (8)Linux使用C语言读取proc/stat等cpu使用数据
  • (delphi11最新学习资料) Object Pascal 学习笔记---第2章第五节(日期和时间)
  • (搬运以学习)flask 上下文的实现
  • (二)linux使用docker容器运行mysql
  • (二)丶RabbitMQ的六大核心
  • (每日持续更新)jdk api之FileReader基础、应用、实战
  • (免费分享)基于springboot,vue疗养中心管理系统
  • (求助)用傲游上csdn博客时标签栏和网址栏一直显示袁萌 的头像
  • (十)【Jmeter】线程(Threads(Users))之jp@gc - Stepping Thread Group (deprecated)
  • (十)T检验-第一部分
  • (算法)求1到1亿间的质数或素数
  • (五)c52学习之旅-静态数码管
  • (转)nsfocus-绿盟科技笔试题目
  • ***原理与防范
  • .NET 8.0 发布到 IIS
  • .net core 3.0 linux,.NET Core 3.0 的新增功能
  • .Net IOC框架入门之一 Unity