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

2024-02-10 22:04

本文主要是介绍双非本科准备秋招(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);}
}

这篇关于双非本科准备秋招(22.1)—— 力扣二叉搜索树的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/698145

相关文章

认识、理解、分类——acm之搜索

普通搜索方法有两种:1、广度优先搜索;2、深度优先搜索; 更多搜索方法: 3、双向广度优先搜索; 4、启发式搜索(包括A*算法等); 搜索通常会用到的知识点:状态压缩(位压缩,利用hash思想压缩)。

hdu1240、hdu1253(三维搜索题)

1、从后往前输入,(x,y,z); 2、从下往上输入,(y , z, x); 3、从左往右输入,(z,x,y); hdu1240代码如下: #include<iostream>#include<algorithm>#include<string>#include<stack>#include<queue>#include<map>#include<stdio.h>#inc

秋招最新大模型算法面试,熬夜都要肝完它

💥大家在面试大模型LLM这个板块的时候,不知道面试完会不会复盘、总结,做笔记的习惯,这份大模型算法岗面试八股笔记也帮助不少人拿到过offer ✨对于面试大模型算法工程师会有一定的帮助,都附有完整答案,熬夜也要看完,祝大家一臂之力 这份《大模型算法工程师面试题》已经上传CSDN,还有完整版的大模型 AI 学习资料,朋友们如果需要可以微信扫描下方CSDN官方认证二维码免费领取【保证100%免费

hdu 4517 floyd+记忆化搜索

题意: 有n(100)个景点,m(1000)条路,时间限制为t(300),起点s,终点e。 访问每个景点需要时间cost_i,每个景点的访问价值为value_i。 点与点之间行走需要花费的时间为g[ i ] [ j ] 。注意点间可能有多条边。 走到一个点时可以选择访问或者不访问,并且当前点的访问价值应该严格大于前一个访问的点。 现在求,从起点出发,到达终点,在时间限制内,能得到的最大

AI基础 L9 Local Search II 局部搜索

Local Beam search 对于当前的所有k个状态,生成它们的所有可能后继状态。 检查生成的后继状态中是否有任何状态是解决方案。 如果所有后继状态都不是解决方案,则从所有后继状态中选择k个最佳状态。 当达到预设的迭代次数或满足某个终止条件时,算法停止。 — Choose k successors randomly, biased towards good ones — Close

hdu4277搜索

给你n个有长度的线段,问如果用上所有的线段来拼1个三角形,最多能拼出多少种不同的? import java.io.BufferedInputStream;import java.io.BufferedReader;import java.io.IOException;import java.io.InputStream;import java.io.InputStreamReader;

两数之和--力扣1

两数之和 题目思路C++代码 题目 思路 根据题目要求,元素不能重复且不需要排序,我们这里使用哈希表unordered_map。注意题目说了只对应一种答案。 所以我们在循环中,使用目标值减去当前循环的nums[i],得到差值,如果我们在map中能够找到这个差值,就说明存在两个整数的和为目标值。 如果没有找到,就将当前循环的nums[i]以及下标i放入map中,以便后续查

【秋招笔试】9.07米哈游秋招改编题-三语言题解

🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 🍒 本专栏已收集 100+ 套笔试题,笔试真题 会在第一时间跟新 🍄 题面描述等均已改编,如果和你笔试题看到的题面描述

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录

Detectorn2预训练模型复现:数据准备、训练命令、日志分析与输出目录 在深度学习项目中,目标检测是一项重要的任务。本文将详细介绍如何使用Detectron2进行目标检测模型的复现训练,涵盖训练数据准备、训练命令、训练日志分析、训练指标以及训练输出目录的各个文件及其作用。特别地,我们将演示在训练过程中出现中断后,如何使用 resume 功能继续训练,并将我们复现的模型与Model Zoo中的

力扣第347题 前K个高频元素

前言 记录一下刷题历程 力扣第347题 前K个高频元素 前K个高频元素 原题目: 分析 我们首先使用哈希表来统计数字出现的频率,然后我们使用一个桶排序。我们首先定义一个长度为n+1的数组,对于下图这个示例就是长度为7的数组。为什么需要一个长度为n+1的数组呢?假如说总共有三个数字都为1,那么我们需要把这个1放在数组下标为3的位置,假如说数组长度为n,对于这个例子就是长度为3,那么它的