数据结构-二叉搜所树java实现

java实现的Trie树数据结构 最近在学习的时候,经常看到使用Trie树数据结构来解决问题,比如“ 有一个1G大小的一个文件,里面每一行是一个词,词的大小不超过16字节,内存限制大小是1M。返回频数最高的100个词。” 该如何解决? 有一种方案就是使用Trie树加 排序实现 。 什么是Trie 树呢?也就是常说的字典树,网上对此讲得也很多,简单补充一下个人理解: 它实际上相当于把单词的公共部分给拎出来,这样一层一层往上拎直 阅读详情

发布一个k8s部署视频:https://edu.youkuaiyun.com/course/detail/26967

课程内容:各种k8s部署方式。包括minikube部署,kubeadm部署,kubeasz部署,rancher部署,k3s部署。包括开发测试环境部署k8s,和生产环境部署k8s。

腾讯课堂连接地址https://ke.qq.com/course/478827?taid=4373109931462251&tuin=ba64518

第二个视频发布  https://edu.youkuaiyun.com/course/detail/27109

腾讯课堂连接地址https://ke.qq.com/course/484107?tuin=ba64518

介绍主要的k8s资源的使用配置和命令。包括configmap,pod,service,replicaset,namespace,deployment,daemonset,ingress,pv,pvc,sc,role,rolebinding,clusterrole,clusterrolebinding,secret,serviceaccount,statefulset,job,cronjob,podDisruptionbudget,podSecurityPolicy,networkPolicy,resourceQuota,limitrange,endpoint,event,conponentstatus,node,apiservice,controllerRevision等。

第三个视频发布:https://edu.youkuaiyun.com/course/detail/27574

详细介绍helm命令,学习helm chart语法,编写helm chart。深入分析各项目源码,学习编写helm插件
————————————————------------------------------------------------------------------------------------------------------------------

 

package com.data.struct;

/**
 * 二叉搜索树
 * @author Administrator
 *
 */
public class BinarySearchTree {
	private Node root;
	public BinarySearchTree(int[]data){
		for(int i=0;i<data.length;i++){
			Node node=new Node();
			node.setValue(data[i]);
			insert(node);
		}
	}
	
	/**
	 * 中序遍历
	 */
	public void inorderTreeWalk(){
		innerInorderTreeWalk(root);
		System.out.println();
	}
	/**
	 * 中序遍历
	 */
	private void innerInorderTreeWalk(Node node){
		if(node!=null){
			innerInorderTreeWalk(node.left);
			System.out.print("-->"+node.value);
			innerInorderTreeWalk(node.right);
		}
	}
	/**
	 * 先序遍历
	 */
	public void preorderWalk(){
		innerPreorderWalk(root);
		System.out.println();
	}
	private void innerPreorderWalk(Node node){
		System.out.print("-->"+node.value);
		innerPreorderWalk(node.left);
		innerPreorderWalk(node.right);
	}
	/**
	 * 后续遍历
	 */
	public void postorderWalk(){
		innerPostorderWalk(root);
		System.out.println();
	}
	private void innerPostorderWalk(Node node){
		innerPostorderWalk(node.left);
		innerPostorderWalk(node.right);
		System.out.print("-->"+node.value);
	}
	/**
	 * 查找值为value的节点
	 * @param value
	 * @return
	 */
	public Node search(int value){
		return innerSearch(root,value);
	}
	private Node innerSearch(Node node,int value){
		if(node==null||node.value==value){
			return node;
		}
		if(node.value>value){
			return innerSearch(node.left,value);
		}else{
			return innerSearch(node.right,value);
		}
	}
	/**
	 * 返回最小值节点
	 * @return
	 */
	public Node minimum(){
		return innerMinimum(root);
	}
	private Node innerMinimum(Node node){
		if(node.left!=null){
			return innerMinimum(node.left);
		}
		return node;
	}
	/**
	 * 返回最大值节点
	 * @return
	 */
	public Node maximum(){
		return innerMaximum(root);
	}
	private Node innerMaximum(Node node){
		if(node.right!=null){
			return innerMaximum(node.right);
		}
		return node;
	}
	/**
	 * 返回给定节点的后继结点
	 * @param node
	 * @return
	 */
	public Node successor(Node node){
		if(node.right!=null){
			return innerMinimum(node.right);
		}
		Node y=node.parent;
		while(y!=null&&y.right==node){
			node=y;
			y=y.parent;
		}
		return y;
	}
	public void insert(int value){
		Node node=new Node();
		node.setValue(value);
		insert(node);
	}
	/**
	 * 插入节点
	 * @param node
	 */
	public void insert(Node node){
		Node y=null;
		Node x=root;
		while(x!=null){
			y=x;
			if(node.value<x.value){
				x=x.left;
			}else{
				x=x.right;
			}
		}
		node.parent=y;
		if(y==null){
			root=node;
		}else if(y.value>node.value){
			y.left=node;
		}else{
			y.right=node;
		}
	}
	
	private void transplant(Node u,Node v){
		if(u.parent==null){
			root=v;
		}else if(u==u.parent.left){
			u.parent.left=v;
		}else{
			u.parent.right=v;
		}
		if(v!=null){
			v.parent=u.parent;
		}
	}
	public void delete(int value){
		delete(search(value));
	}
	/**
	 * 删除节点
	 * @param node
	 */
	public void delete(Node node){
		if(node.left==null){
			transplant(node,node.right);
		}else if(node.right==null){
			transplant(node,node.left);
		}else{
			Node y=innerMinimum(node.right);
			if(y.parent!=node){
				transplant(y,y.right);
				y.right=node.right;
				y.right.parent=y;
			}
			transplant(node,y);
			y.left=node.left;
			y.left.parent=y;
		}
	}
	private static class Node{
		private Node left;
		private Node right;
		private Node parent;
		private int value;
		public Node getLeft() {
			return left;
		}
		public void setLeft(Node left) {
			this.left = left;
		}
		public Node getRight() {
			return right;
		}
		public void setRight(Node right) {
			this.right = right;
		}
		public Node getParent() {
			return parent;
		}
		public void setParent(Node parent) {
			this.parent = parent;
		}
		public int getValue() {
			return value;
		}
		public void setValue(int value) {
			this.value = value;
		}
		
	}
	public static void main(String[] args) {
		int [] data=new int[]{8,3,2,6,3,9,1};
		BinarySearchTree tree=new BinarySearchTree(data);
		tree.inorderTreeWalk();
		tree.insert(5);
		tree.inorderTreeWalk();
		tree.delete(3);
		tree.inorderTreeWalk();

	}

}

 

Java实现B+树数据结构实战教程 B+树是一种树型数据结构,它是B树的变种,广泛应用于数据库和文件系统中。与B树相比,B+树的所有数据都存储在叶子节点中,且叶子节点之间通过指针连接形成一个有序链表。这样的结构优化了范围查询的效率,并使得数据存取更加高效。B+树具有以下特性:平衡性:确保每次访问的时间复杂度稳定在O(log n)。顺序性:叶子节点之间的指针保证了数据的顺序访问。空间利用率:非叶子节点仅存储键(keys)而不存储记录,提高空间使用效率。 阅读详情

相关推荐

工厂自动化布线实战:从功率计算到线槽布局的完整避坑指南

本文详细介绍了工厂自动化布线的实战经验,从功率计算到线槽布局的完整避坑指南。通过三步计算法确定线径需求,强调电压降控制的重要性,并分享线槽布局的50%法则和强弱电分离技巧。特别针对移动设备和多芯信号线提供专业解决方案,帮助工程师避免常见错误,提升布线效率和质量。

weixin_29266007的博客 355

普通树的广度搜索和深度搜索java实现

数据结构中的树搜索方式可以分为广搜和深搜,顾名思义,广搜就是一层一层的搜索,深搜就是先搜索左子树从左节点搜索一直到叶子节点,然后搜索右子树。 下面用java实现广搜和深搜: 广搜采用队列的结构,java API提供了双端队列的类ArrayDeque public static Tree find(int value, Tree tree){ Deque deque = new ArrayD

liangtianmeng的专栏 706

PLC与变频器联动控制:从开关量、模拟量到通讯的接线与编程实战

在工业自动化系统中,电机调速控制是核心需求之一,其关键在于实现可编程逻辑控制器(PLC)与变频器之间的可靠联动。其基本原理是通过PLC输出控制信号,由变频器接收并驱动电机按设定速度运行。这项技术的核心价值在于实现电机的软启停、精确调速与节能控制,广泛应用于风机、水泵、传送带及精密张力控制等场景。其中,开关量控制以其接线简单、抗干扰能力强的特点,成为基础且可靠的方案;而模拟量控制则能实现无级平滑调速,满足更高精度的工艺要求。本文以西门子、三菱等主流品牌为例,深入解析了这两种主流控制方式的硬件接线、参数设置与梯

1271

【数据结构与算法】Java中的基本数据结构:数组、链表、树、图、散列表等。

在本文中,我们将深入探讨Java集合框架中的核心数据结构,包括数组、链表、树、图、散列表、栈、队列、集合、映射和优先队列。通过分析每种数据结构的实现原理和特点,你将学会如何根据具体需求选择合适的数据结构,从而提升程序的性能和效率。文章还包含了Java代码示例和流程图,帮助你更好地理解和应用这些数据结构。

Dylaniou的博客 2540

MT9V034摄像头学习笔记(一)_mt9v034摄像头循迹代码(1)

函数名称:uint8_t SCB_RegRead(uint8_t Device,uint8_t Address,uint16_t *Data)* 函数名称:uint8_t SCB_RegWrite(uint8 Device,uint8 Address,uint16 Data)* 函数名称:uint8 SCCB_SendByte(uint8 Data)* 函数名称:uint8 SCCB_ReadByte(void)* 修改时间:2018年3月4日。* 修改时间:2018年3月4日。

2401_87555661的博客 908

S4 Hana SD -信贷管理 - 02

在S4版本中,客户的信用管理数据在事务代码BP维护,业务伙伴角色是UKM000。在维护过程中,我们并不能直接输入信贷控制范围这个组织架构,而是需要输入一个信用段,并且在信用段的维度下去维护相应信用管理数据。对于信用段,可以分为主信用段(信用段是0000)和其他临时信用段,我们可以通过配置把次级信用段的客户信贷负债汇总到主信用段。当然,在后台也有配置,会把信用段和信贷控制范围这两者进行关联.3.2SPROIMG > 财务供应链管理 > 信用管理 > 信贷风险监视 > 主数据 > 创建信用段。

weixin_46525734的博客 1968

数据结构之树(JAVA实现)

1. 什么是树 树(Tree)是一种抽象数据类型,用来模拟实现具有树状类型结构的数据集合。它具有n(n>=0)个有层次的有限结点。当n=0时,称为空树;n>0时,其余结点分为m个互斥的有限集合T1,T2,T3,每个集合分别称为子树。 2. 树的性质 3. ...

weixin_38419670的博客 7866

麒麟系统下的多媒体革命:VLC在kylinV10上的性能优化与调试技巧

本文详细介绍了在麒麟kylinV10系统上优化VLC多媒体播放性能的实战技巧,特别针对飞腾FT-2000/4硬件平台。从源码编译调优到硬件加速配置,提供全面的性能提升方案,帮助开发者在国产操作系统上构建高效媒体播放环境。

weixin_29168675的博客 458

B树及其Java实现详解

B-Tree应该是大多数像我一样以计算机科学为学习专业的大学生所熟悉的。其最初目的是通过尽可能减少存储I / O操作来减少在计算机硬盘驱动器上花费的时间。该技术在数据库和文件系统等计算机领域中发挥了很好的作用。大数据和NoSQL分布式数据库系统(由于廉价的硬件和互联网增长)B-Tree及其变体在数据存储方面发挥着前所未有的重要作用。 本文中将讨论和解释如何使用Java来完成BTree数据结构的实现。

herry816的博客 4543

MATLAB船舶开尔文尾迹三维仿真建模

开尔文尾迹介绍 Kelvin最早研究舰船在水面运动在水面上形成波纹的原理,主要针对静水中点源运动的尾迹问题,并给出尾迹的张角和波高分布情况。由 Kelvin 的理论,一般情况下假设由一个理想点源来代替舰船,开尔文尾迹由分歧波和横断波组成,分歧波向船的两侧扩散,而横断波主要向船的后方传播,在相遇的地方两波相干形成尖头波,且尖头波位于尾迹角16°到19.5°之间,又因为尖头波波长过短,以至于无法单独的区分出每个尖头波的波前,所有的波前在视觉效果上就连成一条直线表现为亮线,称为开尔文臂,开尔文臂以船身对称,且角度

qq_19512613的博客 3847

华为OD机试真题 新系统【小学英语老师批改作文】

华为OD机试 新系统真题【小学英语老师批改作文】,提供C语言、Java、C++、Python、Go、JavaScript源码实现,并提供完整思路讲解,以及在线OJ模拟做题。华为OD机试真题【小学英语老师批改作文】

qq_45776114的博客 926

【Java数据结构】树

java集合框架:树

2303_77535762的博客 1988

Orin 调试GMSL camera 96712手册重点

96712基础理解

乐于分享 9203

Java 使用 Redis 实现微博热搜功能

在实现热搜功能时,Redis 提供的SortedSet(有序集合)是非常合适的。SortedSet:是一个有序的集合,每个元素都有一个分数(score),Redis 会自动根据分数对元素进行排序。适合实现需要排序的场景,如热搜榜单、排行榜等。通过以上的实现,我们展示了如何使用Java和Redis来实现一个简单的微博热搜功能。通过 Redis 的有序集合,我们能够高效地记录和排序搜索关键词的热度,并在用户请求时实时返回当前最热门的话题。

w_l666的博客 1681

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

java中的数据结构——树

树 树形结构是一种层级式的数据结构,由节点和连接它们的边组成, java语言编写的程序中常常用引用来表示边。根是树中顶端的节 点:它没有父节点。节点表示保存在树中的数据对象。非平衡树是 指根左边的后代比右边多,或者相反。 区分树和图的主要特征是树中不存在环路。 树的节点 Root,parent,child,leaf,sibling 。 树的主要类型 N元树 平衡树 二叉树 二叉搜索树 AVL树 红...

lx_Frolf的博客 6550

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

数据结构---树(所有类型的树总结)

文章目录数据结构---树1.二叉树2.二叉查找树-BST3.平衡二叉树-AVL4.红黑树5.哈夫曼树6.B树7.B+树8.R树总结 数据结构—树 本章总结数据结构中一些树的特征和结构。转载自这里 1.二叉树 二叉树:最多有两颗子树的树被称为二叉树。 二叉树又分为斜树,满二叉树,完全二叉树: 斜树:所有节点都只有左子树的二叉树叫做左斜树,所有节点都只有右子树的二叉树叫做右斜树。(本质就是链表) 满二叉树:二叉树中所有非叶子结点的度都是2,且叶子结点都在同一层次上。 完全二叉树:如

小皮皮LL的博客 7739

B树详细图解与Java完整实现

本文的目的是从B树的起源讲起,再到多种语言的实现,以达到对B树有一个全面的认识,如果你是一个正常的程序员,那么看完就应该可以实现一个B-Tree了(如果你已经会了,那么也不会看完)。 B树的起源 在1970年,Bayer&McCreight发表的论文《ORGANIZATION AND MAINTENANCE OF LARGE ORDERED INDICES 》(大型有序索引的组织和维护)中提出...

寂寞的博客 1万+

数据结构—树(Tree)的入门原理以及Java实现案例

详细介绍了树这种数据结构的基本概念,以及通用的树的Java实现方式,为后面各种树的深入学习打好基础。

终生学习践行者 1万+

数据结构JAVA实现——树

树的各种实现形式

weixin_46096297的博客 777

【数据结构】初入数据结构的树(Tree)以及Java代码实现(二)

初入数据结构的树(Tree)以及Java代码实现(二) 这里注重的讲解树的Java代码实现,为了简单易懂,所以这里的实现主要是无序树 前提概念 我这里会分别使用两个角度来实现无序树: 底层结构是数组还是链表 树的四种表示法,双亲表示法,孩子表示法,双亲孩子表示法,孩子兄弟表示法 实现树的功能有: 是否空树? 查询树的结点数量 查询树的高 为某个结点插入子结点 设置根结点 查询返回根结点...

长路漫漫的歇脚处 1988

B+树原理分析及Java代码实现

今天我们分析B+树原理及Java代码实现,以前我写过一篇关于mysql 存储引擎B+Tree、 B-Tree和hash三种原理及区别,可以先参考 参考 参阅

nandao158的博客 4919

深入理解Java数据结构:树

在计算机科学中,树是一种重要的数据结构,具有广泛的应用。它是一种非线性的数据结构,由节点和边组成,可以用来表示层次关系、组织结构、排序等。本文将深入介绍树的基本概念、常见的树结构以及它们在Java编程中的应用。树作为一种重要的数据结构,在计算机科学中具有广泛的应用。通过了解树的基本概念、常见的树结构以及它们在Java编程中的应用,我们可以更好地理解和应用树结构来解决实际问题。合理选择和使用树结构,能够提高程序的效率和性能,实现更加高效的数据组织和操作。

Hhzzy99的博客 4202

数据结构—树(java实现)

节点是树构造的基本单元,树是由节点按照一定顺序构造而出的。Node left;Node right;int value;节点的定义需要包括空参构造和有参构造,以及节点的值,节点的左子节点和右子节点。//查找目标元素=num){}else{//查找目标元素的父节点= null) {//查找目标元素的右子树的最小值= null){//删除代码System.out.println("空树");return;

2301_78125917的博客 1566

数据结构——树的概述

引言 对于大量的输入数据,链表的线性访问时间太慢,不宜使用。本篇讨论一种简单的数据结构——树,它大部分操作的运行时间平均为O(logN)O(logN)O(logN)。数据结构中有很多树的结构,其中包括二叉树、二叉搜索树、2-3树、红黑树等等。 基本概念 树(tree)是一些节点的集合。该集合可以是空集,若不是空集,则树由称为根(root)r的节点以及0个或 多个非空的子树组成。 每颗子树的根就做根...

日积月累,天道酬勤 3166

【数据结构】初入数据结构的树(Tree)以及Java代码实现(一)

初入数据结构的树(Tree)以及Java代码实现 树的定义 为什么叫树? 树型结构的元素具有一对多关系 树的定义 树的一些基本概念 树的结点 后代,祖先 子树、空树 树的度与高(深度),结点的度与层次 有序树,无序树和森林 树的三种形式的Java代码实现 树的定义(Tree) 为什么叫树? 为什么叫树呢?因为将具有一对多关系的集合中的元素安装上图中的逻辑结构存储,整个存储形...

长路漫漫的歇脚处 2929
上一篇: 数据结构-完全hash,二级哈希java实现
下一篇: 计算机科学中的树
hxpjava1
博客等级 码龄19年 1365粉丝 511原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

hxpjava1

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值