(Java学习笔记12)二叉树---(插入、查询、遍历)

Java创建二叉树的3种方式 Java实现二叉树的3种方式,顺序二叉树的实现,二叉树的三叉链表存储,二叉树的二叉链表实现 立即下载
二叉树

 * 一、为什么需要使用树。

   有序数组插入数据项和删除数据项太慢。

   链表查找数据太慢

   在树种能非常快速的查找数据项、插入数据项和删除数据项。

 * 二、树的结构

  (此图省略)

 * 三、路径

     顺着连接节点的边从一个节点到另一个节点,所经过的节点顺序排列称为路径。

 * 四、根

     树最上面的节点称为根节点。一棵树只有一根。而且从根到任何节点有且只有一条路径。

 * 五、父节点

     每个节点都有一条边向上连接到另一个节点,这个节点就称为是下面这个节点的父节点。

 * 六、子节点

           每个节点都有一条边向下连接到另一个节点,下面的节点就是该节点的子节点。

 * 七、叶子节点

     没有子节点的节点称为叶子节点

 * 八、子树

     每个节点都可以作为一个子树的根,它和它所有的子节点,子节点的子节点组合在一起就是子树

 * 九、访问

     访问一个节点是为了在这个节点上执行一些操作,如查看节点的数据项,但是如果仅仅是经过一个节点,

     不认为是访问了这个节点。

 * 十、层

      一个节点的层数是指从根开始到这个节点有多少代。

一、插入节点。

  从根节点开始查找一个相应的节点,这个节点将成为新插入节点的父节点。当

        父节点找到后,通过判断新节点的值比父节点的值的大小来决定是连接到左子节点还是右子节点。

 二、查找节点

       从根节点开始查找,如果查找的节点值比当前节点的值小,则继续查找其左子树,否则查找其右子树。

三、遍历二叉树

遍历树是根据一个特定的顺序访问树的每一个节点,根据顺序分为前序、中序、后序遍历三种。

1)前序遍历

* 先访问根节点

* 前序遍历左子树

* 前序遍历右子树

2)中序遍历

* 中序遍历左子树

* 访问根节点

* 中序遍历右子树

3)后续遍历

* 后序遍历左子树

* 后序遍历右子树

* 访问根节点


public class Node {
	//数据项
	public long data;
	//数据项
	public String sData;
	//左子节点
	public Node leftChild;
	//右子节点
	public Node rightChild;
	
	/*
	 * 构造方法
	 * 
	 * */
	public Node(long value,String sData){
		this.data=value;
		this.sData=sData;
	}
}

public class Tree {
	//根节点
	public Node root;
	
	/*
	 * 插入节点
	 * */
	public void insert(long value,String sValue){
		//封装节点
		Node newNode=new Node(value,sValue);
		//引用当前节点
		Node current=root;
		//引用父节点
		Node parent;
		//如果root为null,也就是第一次插入的时候
		if(root==null){
			root=newNode;
			return;
		}else{
			while(true){
				//父节点指向当前节点
				parent = current;
				//如果当前指向的节点数据比插入的要大,则向左走
				if(current.data > value){
					current=current.leftChild;
					if(current==null){
						parent.leftChild=newNode;
						return;
					}
				}else{
					current=current.rightChild;
					if(current==null){
						parent.rightChild=newNode;
						return;
					}
				}
			}
		}
	}
	
	/*
	 * 查找节点
	 * */
	public Node find(long value){
		//引用当前节点,从根节点开始
		Node current=root;
		//循环,只要查找值不等于当前节点的数据项
		while(current.data!=value){
			//进行比较,比较查找和当前节点的大小
			if(current.data>value){
				current=current.leftChild;
			}else{
				current=current.rightChild;
			}
			
			//如果查找不到
			if(current==null){
				return null;
			}
		}
		return current;
		
	}
	
	/*
	 * 删除节点
	 * */
	public void delete(long value){
		
	}
	
	/*
	 * 前序遍历
	 * */
	public void frontOrder(Node localNode){
		if(localNode != null){
			//先访问根节点
			System.out.println(localNode.data+","+localNode.sData);
			//前序遍历左子树
			frontOrder(localNode.leftChild);
			//前序遍历右子树
			frontOrder(localNode.rightChild);
		}
	}
	
	/*
	 * 中序遍历
	 * */
	public void inOrder(Node localNode){
		if(localNode != null){
			//先访问左子树
			inOrder(localNode.leftChild);
			//中序遍历根节点
			System.out.println(localNode.data+","+localNode.sData);
			//中序遍历右子树
			inOrder(localNode.rightChild);
		}
	}
	
	/*
	 * 后序遍历
	 * */
	public void afterOrder(Node localNode){
		if(localNode != null){
			//后序遍历左子树
			afterOrder(localNode.leftChild);
			//后序遍历右子树
			afterOrder(localNode.rightChild);
			//遍历根节点
			System.out.println(localNode.data+","+localNode.sData);
		}
	}
}


public class TestTree {
	public static void main(String args[]){
		Tree tree=new Tree();
		tree.insert(10,"James");
		tree.insert(20,"Yao");
		tree.insert(15,"Kobe");
		tree.insert(3,"Mac");
		tree.insert(4, "Zhangsan");
		tree.insert(90, "Lisi");
		//后序、前序、中序遍历
		tree.afterOrder(tree.root);
//		tree.frontOrder(tree.root);
//		tree.inOrder(tree.root);
		
	}
}




JAVA二叉树插入节点、删除节点、修改节点操作(有源码) 本人用JAVA写的二叉排序树,有二叉树插入节点、删除节点、修改节点等操作,其中还写了一个字符串比较(字母模式比较,数值模式比较)另外不附有源码 立即下载

相关推荐

FunASR与FreeSWITCH融合实战:从零构建高精度语音质检系统

本文详细介绍了如何将FunASR与FreeSWITCH融合,构建高精度语音质检系统。通过实时语音听写技术,结合热词定制和多模型切换,实现客服中心等场景的自动化质检,显著提升识别准确率和效率。系统架构涵盖音频采集、识别处理和业务应用三层,支持负载均衡和性能优化,适用于工业级部署。

weixin_29198045的博客 980

java代码实现二叉树_java实现二叉树相关代码-----数据结构

接口/*1.开发时间:2014-11-5*2.开发者:赵远*3.维护者:赵远*3.程序说明:树的接口*4.注意事项:暂且没有***/packageTree;importTree.node;publicinterfaceTreeNode{//classNode{};//1.求二叉树中的节点个数intGetNodeNum(noderoot);//2.求二叉树的深度int...

weixin_29969209的博客 220

Ubuntu离线情况下安装gcc编译器

Ubuntu离线情况下安装gcc编译器1.系统版本2.安装说明3.异常处理 1.系统版本 (1)Ubuntu系统版本:20.04.1LTS; (2)gcc编译器版本:gcc-9.3.0(下载链接为https://download.youkuaiyun.com/download/qq_18350351/13762214); 当前可找到的gcc最新版本为gcc-10,但是笔者在安装gcc-10版本时发现一些依赖项无法安装,因此选取了gcc-9版本。如果是在联网情况下安装,直接使用apt相关的安装指令即可。 2.安装说明 安

GreenHand的博客 3932

LeetCode-二叉搜索树中的插入操作

题目要求 原题链接:701. 二叉搜索树中的插入操作 给定二叉搜索树(BST)的根节点和要插入树中的值,将值插入二叉搜索树。 返回插入后二叉搜索树的根节点。 输入数据 保证 ,新值和原始二叉搜索树中的任意节点值都不同。 注意,可能存在多种有效的插入方式,只要树在插入后仍保持为二叉搜索树即可。 你可以返回 任意有效的结果 。 示例 1: 输入:root = [4,2,7,1,3], val = 5 输出:[4,2,7,1,3,5] 解释:另一个满足题目要求可以通过的树是: 示例 2: 输入:root =

快乐学术猿 525

深入解析Incapsula reese84的生成机制与绕过策略

本文深入解析了Incapsula reese84的生成机制与绕过策略。reese84是一种基于客户端JavaScript挑战的Web安全防护,通过动态算法收集浏览器指纹并生成令牌Cookie。文章详细拆解了其两步验证流程,并提供了使用无头浏览器、逆向JS模拟请求以及Token维护等实战绕过方法,帮助开发者和安全研究人员应对自动化访问拦截。

weixin_29256771的博客 442

agv调度系统3.0技术介绍

agv调度系统,穿梭车调度系统,调度系统技术介绍,教你做调度

持续分享调度系统开发过程 4866

7.1 二叉树学习及其java实现

树是一种类似于链表的数据结构,只不过链表中节点之间的关系是1对1,而在树中就变成了一对多的关系,树结构是表达具有层次结构的图的一种方式。如下图所示:每个节点都会有0/1/2个子节点和一个父节点,只有根节点没有父节点fill:#333;color:#333;color:#333;fill:none;123456null对于树这种数据结构的应用,元素的顺序并不是考虑的重点,如果我们需要用到元素的顺序信息, 我们大可去使用链表,栈,队列等这些较为简单的数据结构那么使用树的关键在于哪里呢。

c1776167012的博客 566

基于YOLOv8的农作物病虫害检测系统设计与实现

国内如中国农业大学的科研团队采用改进的Faster R-CNN模型对小麦病害进行检测,取得了较好的效果。农作物病虫害是影响农业生产的重要因素之一,每年因病虫害导致的农作物减产高达20%-40%。YOLO(You Only Look Once)系列算法作为目标检测领域的代表性模型,以其高效、准确的特点在众多领域得到广泛应用。YOLOv8作为该系列的最新版本,在精度和速度上都有显著提升,非常适合农作物病虫害检测这类需要实时处理的应用场景。然而,现有研究仍存在一些不足:一是模型复杂度高,难以部署到移动设备;

YOLO 794

【Java数据结构】二叉搜索树增、插,删,创详解

搜索二叉树详解

耀的博客 2537

ZYNQ microblaze boot.bin固化步骤

一,ZYNQ移植软核的原理FPGA规模巨大而且功能复杂,因此设计的每一个部分都从头开始是不切实际的。一种解决的办法是:对于较为通用的部分可以重用现有的功能模块,而把主要的时间和资源用在设计中的那些全新的、独特的部分。这就像是你在开发应用程序的时候就不用直接去写驱动物理硬件的代码,而是直接调用Windows提供的API就行了。

wangjie36的博客 2780

PyTorch 面试题及参考答案(精选100道)

模块是 PyTorch 中用于自动求导的核心模块。它为张量上的所有操作提供了自动求导的功能。在深度学习中,反向传播是一种用于计算损失函数相对于模型参数的梯度的算法。通过梯度,我们可以使用优化算法(如随机梯度下降)来更新模型的参数,从而最小化损失函数。模块的主要作用就是自动计算这些梯度。当我们创建一个张量时,如果将其属性设置为True,那么 PyTorch 会跟踪该张量上的所有操作。在完成前向传播计算出损失函数后,调用方法,模块会自动根据链式法则反向传播计算出所有需要求导的张量的梯度。

大模型大数据攻城狮的专栏 1678

二叉树的构建以及遍历

二叉树的构建和遍历 package com.qcby.tree; public class TreeNode { public TreeNode leftChild; public TreeNode rightChild; public Integer value; public TreeNode(Integer value) { this.value = value; } } 然后需要一个测试类 package com...

cang_ling的博客 492

华为OD机考双机位C卷 - 螺旋数字矩阵 (Java & Python& JS & C/C++ & GO )

华为OD机考双机位C卷 - 数字螺旋矩阵(OD上机考试双机位C卷)。提供在线OJ刷题。Java、C++、Python、GO语言、C语言、JavaScript题解,并提供完整思路讲解。

算法大师! 3215

使用Java操作二叉树的插入查询遍历和打印(代码)

关于二叉树详细介绍请移步:https://blog.youkuaiyun.com/weixin_40165163/article/details/83826223 为了熟悉IntelliJ把之前写的二叉树翻了一遍到java也算是复习了一遍。 Node: package com.company; public class Node { public Node(int value) { ...

王佳宇的个人博客 6054

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

二叉树的构建和遍历、查询

如图,树的一个节点拥有三个关键部分,分别是左子节点(lChild)、右子节点(rChild)和值(data)。就拿有序二叉树来说,它的特点是:左子节点的值比父节点小,右子节点比父节点大例如:构建有序二叉树4871923。

2501_93889296的博客 1370

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java实现二叉树

二叉树的定义 树(tree)是一种抽象数据类型(ADT),用来模拟具有树状结构性质的数据集合。它是由n(n>0)个有限节点通过连接它们的边组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的树。 二叉树是一种特殊的树,每个节点最多只能有两个子节点。(如图1.1) 二叉搜索树要求:若它的左子树不空,则左子树上所有结点的值均小于它的根结点的...

oneTreeTallTall 2万+

二叉树插入数据以及查询遍历

public class Node { //数据 private int value; //左子节点 private Node leftChild; //右子点的 private Node rightChild; public Node() { } public Node(int value){ this....

wyq1614406553的博客 511

【做算法学数据结构】二叉树的层序遍历【二叉树】

`二叉树`是一种常见的树形数据结构,每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的特点是每个节点最多有两个子节点,并且子节点的顺序是有序的,即左子节点在前,右子节点在后。

yh4494的博客 1908

二叉查找树 遍历 java_Java实现二叉排序树的插入查询与遍历

二叉排序树的非递归插入,非递归查询,寻找最大值,寻找最小值package whut.tree;//二叉排序树的非递归插入,非递归查询,寻找最大值,寻找最小值class Node {private int data;private Node left;private Node right;public Node(int data) {this.data = data;}public int getD...

weixin_34432821的博客 134

用java 建立一棵二叉树,试编程实现二叉树的如下基本操作:1. 按先序序列构造一棵二叉链表表示的二叉树T;2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出结点的遍历序列;

建立一棵二叉树,试编程实现二叉树的如下基本操作: 1. 按先序序列构造一棵二叉链表表示的二叉树T; 2. 对这棵二叉树进行遍历:先序、中序、后序以及层次遍历,分别输出结点的遍历序列; 3. 求二叉树的深度/结点数目/叶结点数目;

絔宝的博客 3825

java 二叉树的遍历

看到之前用c写的二叉树的遍历,闲着无聊,用java来实现一下。 import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; public class BinaryTreeTest{ public static void main(String args[]){

quanbove的专栏 957

二叉树 java泛型_java二叉树

二叉树的非递归遍历二叉树的非递归遍历java的非递归后续遍历文章yichudu2014-04-04791浏览量Java工程师必知词汇:二叉树|名词定义|二叉树(Binary tree)是每个节点最多只有两个分支(即不存在分支度大于2的节点)的树结构。通常分支被称作“左子树”或“右子树”。二叉树的分支具有左右次序,不能随意颠倒。二叉树而言,在进行数据获取的时候也有三种形式:前序遍历(根-左-右)、中...

weixin_36331336的博客 827

算法学习----二叉树的查找、 删除、插入、遍历

算法学习----二叉树的查找、 删除、插入

SunnyAndroider专栏 1114

【二叉树专题】—— 遍历二叉树

递归法的二叉树遍历

欢迎来到我的世界 348

二叉树-查找、插入、遍历等操作的Java实现

场景说明: 1、二叉树遍历-插入、查找、遍历操作实现 2、因为删除节点,需要重组二叉树,通常性能较低,该示例采用isDelete标识节点状态 3、适应场景:key不能重复,推荐自增序列,不允许插入之前使用过的key作为新Node的key,则能保证find/delete按照key删除指定元素(否则可能出现删除、查找不到对应元素的情况) 代码实现: PrefixNode.java pub...

聚沙成塔 925

java中的二叉树

本文介绍了二叉树的相关概念及其优化策略。首先对比普通二叉树和二叉查找树(二叉排序树)的特点,后者通过"左小右大"的存储规则提升查询效率。针对二叉查找树可能出现的"瘸子树"问题,引入平衡二叉树的概念,要求任意节点左右子树高度差不超过1,并详细说明四种旋转机制(左旋、右旋及其组合)来维持平衡。最后探讨TreeSet集合的排序实现,包括自然排序(Comparable接口)和比较器排序两种方式,以及返回值对排序结果的影响。

2402_84175119的博客 1501
上一篇: (Java学习笔记11) 快速查询
下一篇: (Java学习笔记13)二叉树---删除二叉树节点
CoderBruis
博客等级 码龄10年 4444粉丝 102原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值