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

6.9(Java)二叉搜索树

1.我的代码:

public class BinarySearchTree {class TreeNode {public int key;public TreeNode left;public TreeNode right;public TreeNode(int key) {this.key = key;}}public TreeNode root;     // 根节点// 插入一个元素,注意,不能插入重复的值,如果这样,插入失败public boolean insert(int key) {TreeNode newNode = new TreeNode(key);if (this.root == null) {this.root = newNode;return true;}TreeNode parent = null;TreeNode cur = this.root;while (cur != null) {if (key == cur.key) {return false;} else if (key < cur.key) {parent = cur;cur = cur.left;} else {parent = cur;cur = cur.right;}}if (key < parent.key) {parent.left = newNode;} else {parent.right = newNode;}return true;}// 查找key是否存在public TreeNode search(int key) {if (this.root == null) {return null;}TreeNode cur = this.root;while (cur != null) {if (key == cur.key) {return cur;} else if (key < cur.key) {cur = cur.left;} else {cur = cur.right;}}return null;}// 删除key的值public boolean removeTreeNode(int key) {if (this.root == null) {return false;}TreeNode parent = null;TreeNode cur = this.root;while (cur != null) {if (key == cur.key) {this.remove(parent, cur);return true;} else if (key < cur.key) {parent = cur;cur = cur.left;} else {parent = cur;cur = cur.right;}}return false;}private void remove(TreeNode parent, TreeNode cur) {// 分三种大情况// 1.该节点左边为空if (cur.left == null) {// 三种小情况if (cur == this.root) {this.root = cur.right;} else if (cur == parent.left) {parent.left = cur.right;} else { // cur == parent.rightparent.right = cur.right;}} else if (cur.right == null) { // 2.右边为空// 三种小情况if (cur == this.root) {this.root = cur.left;} else if (cur == parent.left) {parent.left = cur.left;} else { // cur == parent.rightparent.right = cur.left;}} else {// 3.左右都不空,使用替罪羊法,找右边最小的替代,然后删除该替代TreeNode tmpParent = cur;TreeNode tmpCur = cur.right;while (tmpCur.left != null) {tmpParent = tmpCur;tmpCur = tmpCur.left;}cur.key = tmpCur.key;// 考虑特殊情况,没有进while循环if (cur == tmpParent) {cur.right = tmpCur.right;} else {tmpParent.left = tmpCur.right;}}}}
public class Test {public static void main(String[] args) {BinarySearchTree binarySearchTree = new BinarySearchTree();int[] array = {12, 4, 5, 10, 8, 3};for (int x : array) {binarySearchTree.insert(x);}binarySearchTree.removeTreeNode(5);}
}

重点研究删除问题,见以上代码.

http://www.lryc.cn/news/113986.html

相关文章:

  • 洛谷P2256 一中校运会之百米跑
  • python-opencv对极几何 StereoRectify
  • pom文件---maven
  • 界面控件DevExpress.Drawing图形库早期增强功能分享
  • Semantic Kernel 入门系列:Connector连接器
  • Maven介绍-下载-安装-使用-基础知识
  • Ansible环境搭建,CentOS 系列操作系统搭建Ansible集群环境
  • Django基础
  • HTML,url,unicode编码
  • Hbase-热点问题(数据存储倾斜问题)
  • 一个基于Java线程池管理的开源框架Hippo4j实践
  • 源码解析Flink源节点数据读取是如何与checkpoint串行执行
  • 进阶:Docker容器管理工具——Docker-Compose使用
  • 策略模式(Strategy)
  • webpack基础知识十:与webpack类似的工具还有哪些?区别?
  • 分享kubernetes部署:基于Ansible自动安装kubernetes
  • 【Kubernetes部署篇】基于Ubuntu20.04操作系统搭建K8S1.23版本集群
  • c++--二叉树应用
  • 以太网DHCP协议(十)
  • 企业服务器器中了360后缀勒索病毒怎么解决,勒索病毒解密数据恢复
  • 详解Kafka分区机制原理|Kafka 系列 二
  • CSS学习记录(基础笔记)
  • Chatgpt AI newbing作画,文字生成图 BingImageCreator 二次开发,对接wxbot
  • PPT忘记密码如何解除?
  • 绘制曲线python
  • CentOs 8 常见问题处理
  • OpenAI将GPT-4设置为ChatGPT Plus付费用户的默认模型
  • textarea 标签如何创建多行文本输入框?
  • (15)Qt绘图(two)
  • 用队列实现栈——数据结构与算法