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

手动实现二叉搜索树

前言

提前祝大家五一快乐~~,基础的数据结构接近尾声了,我模拟实现了一个 二叉搜索树,分享给大家,希望可以帮助到有需要的人。

思维导图(思路)

代码 

package demo1;public class BinarySearchTree {static class TreeNode {public int val;public TreeNode left;public TreeNode right;public TreeNode(int val) {this.val = val;}}public TreeNode root ;//别忘记这个啦public void insert(int key) {if(root==null){root=new TreeNode(key);return;}TreeNode cur=root;TreeNode parent=null;TreeNode node=new TreeNode(key);while(cur!=null){if(cur.val>key){parent=cur;cur=cur.left;}else if(cur.val<key){parent=cur;cur=cur.right;}else{//因为不能插入相同的return;}}//走到这里,parent.val一定不会等于key的if(parent.val>key){parent.left=node;}else {parent.right=node;}}/*** 时间复杂度:*        最好情况: O(logN)*        最坏情况: O(N)* @param key* @return*/public TreeNode search(int key) {TreeNode cur=root;while(cur!=null){if(cur.val<key){cur=cur.right;}else if(cur.val>key){cur=cur.left;}else{return cur;}}return null;}public void remove(int key) {if(root==null){return;}TreeNode parent=null;TreeNode cur=root;while(cur!=null){if(cur.val>key){parent=cur;cur=cur.left;}else if(cur.val<key){parent=cur;cur=cur.right;}else{removeNode(parent,cur);//别搞忘写returnreturn;}}}private void removeNode(TreeNode parent, TreeNode cur) {if(cur.left==null){if(cur==root){root=cur.right;}else if(parent.right==cur){parent.right=cur.right;}else{parent.left=cur.right;}}else if(cur.right==null){if(cur==root){root=cur.left;}else if(parent.right==cur){parent.right=cur.left;}else{parent.left=cur.left;}}else{TreeNode tp=cur;TreeNode t=cur.right;while(t.left!=null){tp=t;t=t.left;}cur.val=t.val;if(tp.left==t){tp.left=t.right;}else{tp.right=t.right;}}}
}

结语 

下次见~~,祝大家五一快乐

http://www.xdnf.cn/news/234109.html

相关文章:

  • AGI时代来临?2030年AI将如何改变人类社会?
  • Spark SQL 之 DAG
  • Linux容器大师:K8s集群部署入门指南
  • 校平机:金属板材加工的核心设备
  • 1295. 统计位数为偶数的数字
  • 大小写问题
  • 5.运输层
  • 解决在Mac上无法使用“ll”命令
  • python与c++变量赋值的区别
  • 【Linux庖丁解牛】—环境变量!
  • 深入解析词嵌入(Word2Vec、GloVe)技术原理:从词语到向量的转变
  • Transformer 模型及深度学习技术应用
  • Langchain+文本摘要-refine
  • Java零基础入门Day3:程序流程控制
  • Flowith:解放思维的AI画布让创意与效率如泉涌
  • 动画震动效果
  • 【Bootstrap V4系列】学习入门教程之 加载必要文件和入门模板
  • javascript 深拷贝和浅拷贝的区别及具体实现方案
  • 【每日八股】复习 Redis Day4:线程模型
  • NLP 分词技术学习
  • 【Dify系列教程重置精品版】第四章:实现Dify的 hello world
  • ISO 26262认证步骤
  • 【Java面试笔记:进阶】30.Java程序运行在Docker等容器环境有哪些新问题?
  • 楼宇智能化三、五章【期末复习】
  • 芯知识|小体积语音芯片方案WTV/WT2003H声音播放ic应用解析
  • 楼宇智能化四章【期末复习】
  • (eNSP)Smart Link配置实验
  • MicroPython for esp32s3开发HX711称重模块指南
  • rk3568 A/B系统 OAT升级 实践
  • 全面了解CSS语法 ! ! !