Java必须掌握的红黑树(含面试大厂题含源码)

当面试官要求你实现一个红黑树时,可能会给你一些提示或者要求,比如要求实现插入、删除、查找等操作。下面是一个简单的红黑树实现示例,包含了插入操作:

class RedBlackTree {private static final boolean RED = false;private static final boolean BLACK = true;class Node {int data;Node parent;Node left;Node right;boolean color;Node(int data) {this.data = data;color = RED;left = null;right = null;parent = null;}}private Node root;// Constructorpublic RedBlackTree() {root = null;}// Insertion operationpublic void insert(int data) {Node newNode = new Node(data);if (root == null) {root = newNode;root.color = BLACK; // Root is always black} else {Node current = root;Node parent = null;while (true) {parent = current;if (data < current.data) {current = current.left;if (current == null) {parent.left = newNode;newNode.parent = parent;break;}} else {current = current.right;if (current == null) {parent.right = newNode;newNode.parent = parent;break;}}}fixInsert(newNode);}}private void fixInsert(Node newNode) {while (newNode != root && newNode.parent.color == RED) {if (newNode.parent == newNode.parent.parent.left) {Node uncle = newNode.parent.parent.right;if (uncle != null && uncle.color == RED) {newNode.parent.color = BLACK;uncle.color = BLACK;newNode.parent.parent.color = RED;newNode = newNode.parent.parent;} else {if (newNode == newNode.parent.right) {newNode = newNode.parent;rotateLeft(newNode);}newNode.parent.color = BLACK;newNode.parent.parent.color = RED;rotateRight(newNode.parent.parent);}} else {Node uncle = newNode.parent.parent.left;if (uncle != null && uncle.color == RED) {newNode.parent.color = BLACK;uncle.color = BLACK;newNode.parent.parent.color = RED;newNode = newNode.parent.parent;} else {if (newNode == newNode.parent.left) {newNode = newNode.parent;rotateRight(newNode);}newNode.parent.color = BLACK;newNode.parent.parent.color = RED;rotateLeft(newNode.parent.parent);}}}root.color = BLACK;}// Left rotationprivate void rotateLeft(Node x) {Node y = x.right;x.right = y.left;if (y.left != null) {y.left.parent = x;}y.parent = x.parent;if (x.parent == null) {root = y;} else if (x == x.parent.left) {x.parent.left = y;} else {x.parent.right = y;}y.left = x;x.parent = y;}// Right rotationprivate void rotateRight(Node x) {Node y = x.left;x.left = y.right;if (y.right != null) {y.right.parent = x;}y.parent = x.parent;if (x.parent == null) {root = y;} else if (x == x.parent.right) {x.parent.right = y;} else {x.parent.left = y;}y.right = x;x.parent = y;}
}

这段代码实现了一个简单的红黑树,并包含了插入操作以及相应的修正方法。在面试过程中,你可能需要解释代码的逻辑,并且可能会被要求实现其他操作,比如删除、查找等。
以下是三个与红黑树相关的面试题,每个题目都附有相应的Java源码实现。

面试题一:实现红黑树的插入操作

**题目描述:**实现一个红黑树的插入操作,并确保插入后的树保持红黑树性质。

Java源码实现:

class RedBlackTree {private static final boolean RED = false;private static final boolean BLACK = true;class Node {int data;Node parent;Node left;Node right;boolean color;Node(int data) {this.data = data;color = RED;left = null;right = null;parent = null;}}private Node root;// Constructorpublic RedBlackTree() {root = null;}// Insertion operationpublic void insert(int data) {// Insertion code here// Make sure to maintain the properties of Red-Black Tree}// Other methods such as rotations, fixInsert, etc. can be included here
}

面试题二:实现红黑树的删除操作

**题目描述:**实现一个红黑树的删除操作,并确保删除后的树保持红黑树性质。

Java源码实现:

class RedBlackTree {private static final boolean RED = false;private static final boolean BLACK = true;class Node {int data;Node parent;Node left;Node right;boolean color;Node(int data) {this.data = data;color = RED;left = null;right = null;parent = null;}}private Node root;// Constructorpublic RedBlackTree() {root = null;}// Deletion operationpublic void delete(int data) {// Deletion code here// Make sure to maintain the properties of Red-Black Tree}// Other methods such as rotations, fixDelete, etc. can be included here
}

面试题三:验证红黑树的性质

**题目描述:**编写一个方法,验证给定的树是否是红黑树,并且给出验证的过程。

Java源码实现:

class RedBlackTree {private static final boolean RED = false;private static final boolean BLACK = true;class Node {int data;Node parent;Node left;Node right;boolean color;Node(int data) {this.data = data;color = RED;left = null;right = null;parent = null;}}private Node root;// Constructorpublic RedBlackTree() {root = null;}// Method to validate Red-Black Tree propertiespublic boolean validateRedBlackTree() {// Validation code here// Check if the tree satisfies all Red-Black Tree propertiesreturn true; // or false based on validation result}// Other methods such as insert, delete, rotations, etc. can be included here
}

这些面试题涵盖了红黑树的基本操作以及对红黑树性质的验证,可以根据具体情况进行更深入的讨论和要求。

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

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

相关文章

.NetCore6.0实现ActionFilter过滤器记录接口请求日志

文章目录 目的实现案例&#xff1a;一.首先我们新建一个WebApi项目二.配置 appsettings.json 文件&#xff0c;配置日志存放路径三.创建 Model 文件夹&#xff0c;创建AppConfig类和ErrorLog类1.在AppConfig类中编写一个GetConfigInfo方法获取配置文件中的值2.在ErrorLog类中&a…

供应josef约瑟DL-24C电流继电器 额定电流3A 整定范围0.5-2A 电气控制必备元件

电流继电器是一种特殊的电子控制器件&#xff0c;具有控制系统和被控制系统&#xff0c;它使用较小的电流去控制较大的电流&#xff0c;起到自动开关的作用。以下是电流继电器的特征&#xff1a; 承载大电流&#xff1a;电流继电器可以承载大电流&#xff0c;通常能够承受数十…

SpringBoot集成Docker

Docker是一个开源的应用容器引擎&#xff0c;它允许开发者将应用及其依赖打包到一个可移植的容器中。 一、依赖 <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://ww…

SpringBoot 接口防刷

1&#xff1a;pom添加依赖 <dependency><groupId>net.jodah</groupId><artifactId>expiringmap</artifactId><version>0.5.10</version></dependency> 2&#xff1a;封装工具 Slf4j public class RequestUtil {/*** 1&#…

大语言模型(LLM):每个专业人士的完美助手

「大语言模型&#xff08;LLM&#xff09;革命」&#xff1a;ChatGPT如何引领工作效率新篇章 在不断发展的技术领域&#xff0c;像 ChatGPT 这样的大型语言模型 (LLM) 已成为各行业专业人士不可或缺的工具。 这篇博文探讨了大语言模型&#xff08;LLM&#xff09;在专业环境中的…

GDPU Java 天码行空2

实验2 类与封装性 文章目录 实验2 类与封装性&#xff08;一&#xff09;实验目的&#xff08;二&#xff09;实验内容和步骤&#xff08;1&#xff09;建立学生类和测试类。学生类中有成员变量&#xff1a;姓名&#xff0c;年龄&#xff1b;成员方法&#xff1a;学习&#xff…

Java 8日期时间类LocalDate、LocalDateTime详解

Java 8日期时间类LocalDate、LocalDateTime详解 一、常见类型转换1.1 LocalDateTime 转 LocalDate1.2 LocalDateTime 转 Date1.3 LocalDate 转 LocalDateTime1.4 LocalDate 转 Date1.5 Date 转 LocalDateTime1.6 Date 转 LocalDate1.7 LocalDate 转 String1.8 String 转 LocalD…

程序逻辑控制

1.java的三大结构 可以说java的这三大结构包括其中的语句跟c语言上的基本上都是一样的。现在就当重新复习一遍吧&#xff01; 1.顺序结构 2.分支结构 if语句 跟c语言的语法一模一样。就直接看文案了。 switch语句 java中的switch语句跟c语言中的switch几乎相同&#xff0c;…

AtCoder Beginner Contest 343 A~F

A.Wrong Answer&#xff08;模拟&#xff09; 题意&#xff1a; 给你两个整数 A A A和 B B B&#xff0c;它们介于 0 0 0和 9 9 9之间。 输出任何一个介于 0 0 0和 9 9 9之间且不等于 A B AB AB的整数。 分析&#xff1a; 按题意判断并输出一个整数即可。 代码&#xff…

[力扣 Hot100]Day39 对称二叉树

题目描述 给你一个二叉树的根节点 root &#xff0c; 检查它是否轴对称。 出处 思路 每一对对称的节点AB&#xff0c;A的左儿子和B的右儿子&#xff0c;A的右儿子和B的左儿子又是一对对称节点。 代码 class Solution { public:bool compare(TreeNode* r1, TreeNode* r2){i…

qnx display

05-SA8155 QNX Display框架及代码分析(1)_openwfd-CSDN博客 backlight p: 0 t: 0 00000 SHD -----ONLINE----- 2024/03/06 13:49:22.046 backlight p:1060958 t: 1 00000 ERR backlight_be[backlight_be.c:284]: pthread_create enter 2024/03/06 13…

python基础练习题目

1. 根据身高体重&#xff0c;判断人的胖瘦 描述&#xff1a; 通过身高和体重&#xff0c;判断一个人的胖瘦。国际上一般采用BMI体重指数&#xff0c;计算公式为BMI 体重 / 身高2(保留小数点后1位)&#xff0c;参考标准如下&#xff1a;‪‬‪‬‪‬‪‬‪‬‮‬‪‬‫‬‪‬‪…

回流和重绘

浏览器是如何进行页面渲染的&#xff1f; 1、解析&#xff08;parser&#xff09;HTML&#xff0c;生成DOM树&#xff1b; 2、同时解析css&#xff0c;生成样式规则&#xff1b; 3、根据DOM树和样式规则&#xff0c;生成渲染树&#xff1b; 4、进行布局Layout&#xff08;回流&…

SpringBoot集成RocketMQ

RocketMQ是一个纯Java、分布式、队列模型的开源消息中间件&#xff0c;前身是MetaQ&#xff0c;是阿里参考Kafka特点研发的一个队列模型的消息中间件&#xff0c;后开源给apache基金会成为了apache的顶级开源项目&#xff0c;具有高性能、高可靠、高实时、分布式特点。 环境搭…

对VisionPro的认识,CogPMAlingTool模板匹配工具练习

什么是VisionPro&#xff1f; 在认识VisionPro之前我们需要先熟悉一下图片的各种格式 这里我们可以参考来自githubcurry博主的文章 图片各种格式的区别以及计算机如何存储图片 VisionPro 是由世界领先的机器视觉公司 Cognex 开发的一款专业机器视觉软件。它提供了强大的图像…

【一】【SQL Server】如何运用SQL Server中查询设计器通关数据库期末查询大题

职工考勤20170320 职工考勤20170320数据库展示 职工考勤表展示 职务代码表展示 一、基本操作 代码方式&#xff1a; --第一大题、基本操作 ALTER TABLE [dbo].[职工考勤表] DROP COLUMN [照片];EXEC sp_rename dbo.职工考勤表.职工编号, 工号, COLUMN;ALTER TABLE 职工考勤表 A…

华为HQoS配置案例

HQoS基于层次化调度&#xff0c;cpe上支持三级队列&#xff1a; level3流队列&#xff1a;每个用户的同类业务是一个业务流&#xff0c;针对每个用户不同的业务流进行队列调度&#xff0c;流队列一般与业务类型对应&#xff08;EF、AF、BE等&#xff09;。 level2用户队列&…

2024年安卓开发者跳槽指南,音视频时代你还不会NDK开发

正式加入字节跳动&#xff0c;分享一点面试小经验 今天正式入职了字节跳动。工号超吉利&#xff0c;尾数是3个6。然后办公环境也很好&#xff0c;这边一栋楼都是办公区域。公司内部配备各种小零食、饮料&#xff0c;还有免费的咖啡。15楼还有健身房。而且公司包三餐来着。下午…

Java对象转JSON的三种方法

Java对象转JSON的三种方法 在Java编程中&#xff0c;我们经常需要将Java对象转换为JSON格式&#xff0c;以便于数据的传输和存储。本文将介绍三种常用的方法来实现Java对象到JSON的转换&#xff0c;分别是使用org.json.JSONObject&#xff0c;Google Gson和Jackson。 一、使用…

UnityAPI的学习——Rigidbody类

Rigidbody类的功能是用来模拟GameObject对象在现实世界中的物体特性&#xff0c;包括重力、阻力、质量、速度等 Rigidbody类实例属性 在Rigidbody类中&#xff0c;涉及的实例属性有collisionDetectionMode、drag、inertiaTensor、mass和velocity。 collisionDetectionMode属…