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

java-数据结构-前中后序查找

java-数据结构-前中后序查找

前序遍历查找

	//前序遍历查找
	/**
	 * 
	 * @param no 查找no
	 * @return 如果找到就返回该Node ,如果没有找到返回 null
	 */
	public HeroNode preOrderSearch(int no) {
		System.out.println("进入前序遍历");
		//比较当前结点是不是
		if(this.no == no) {
			return this;
		}
		//1.则判断当前结点的左子节点是否为空,如果不为空,则递归前序查找
		//2.如果左递归前序查找,找到结点,则返回
		HeroNode resNode = null;
		if(this.left != null) {
			resNode = this.left.preOrderSearch(no);
		}
		if(resNode != null) {//说明我们左子树找到
			return resNode;
		}
		//1.左递归前序查找,找到结点,则返回,否继续判断,
		//2.当前的结点的右子节点是否为空,如果不空,则继续向右递归前序查找
		if(this.right != null) {
			resNode = this.right.preOrderSearch(no);
		}
		return resNode;
	}

中序遍历查找

	//中序遍历查找
	public HeroNode infixOrderSearch(int no) {
		//判断当前结点的左子节点是否为空,如果不为空,则递归中序查找
		HeroNode resNode = null;
		if(this.left != null) {
			resNode = this.left.infixOrderSearch(no);
		}
		if(resNode != null) {
			return resNode;
		}
		System.out.println("进入中序查找");
		//如果找到,则返回,如果没有找到,就和当前结点比较,如果是则返回当前结点
		if(this.no == no) {
			return this;
		}
		//否则继续进行右递归的中序查找
		if(this.right != null) {
			resNode = this.right.infixOrderSearch(no);
		}
		return resNode;
		
	}

后序遍历查找

	//后序遍历查找
	public HeroNode postOrderSearch(int no) {
		
		//判断当前结点的左子节点是否为空,如果不为空,则递归后序查找
		HeroNode resNode = null;
		if(this.left != null) {
			resNode = this.left.postOrderSearch(no);
		}
		if(resNode != null) {//说明在左子树找到
			return resNode;
		}
		
		//如果左子树没有找到,则向右子树递归进行后序遍历查找
		if(this.right != null) {
			resNode = this.right.postOrderSearch(no);
		}
		if(resNode != null) {
			return resNode;
		}
		System.out.println("进入后序查找");
		//如果左右子树都没有找到,就比较当前结点是不是
		if(this.no == no) {
			return this;
		}
		return resNode;
	}

节点

//先创建 HeroNode 结点
class HeroNode {
	private int no;
	private String name;
	private HeroNode left; //默认null
	private HeroNode right; //默认null
	public HeroNode(int no, String name) {
		this.no = no;
		this.name = name;
	}
	//setter,getter
	@Override
	public String toString() {
		return "HeroNode [no=" + no + ", name=" + name + "]";
	}
	
	//前序遍历查找
	
	//中序遍历查找
	
	//后序遍历查找
	
}

二叉村

//定义BinaryTree 二叉树
class BinaryTree {
	private HeroNode root;

	public void setRoot(HeroNode root) {
		this.root = root;
	}
	

	//前序遍历-打印
	
	//中序遍历-打印

	//后序遍历-打印
	
	//前序遍历-查找
	public HeroNode preOrderSearch(int no) {
		if(root != null) {
			return root.preOrderSearch(no);
		} else {
			return null;
		}
	}
	//中序遍历-查找
	public HeroNode infixOrderSearch(int no) {
		if(root != null) {
			return root.infixOrderSearch(no);
		}else {
			return null;
		}
	}
	//后序遍历-查找
	public HeroNode postOrderSearch(int no) {
		if(root != null) {
			return this.root.postOrderSearch(no);
		}else {
			return null;
		}
	}
}

相关文章:

  • java-数据结构-顺序存储二叉树
  • java-数据结构-线索化二叉树
  • java-数据结构-大顶堆和小顶堆
  • java-数据结构-赫夫曼树(Huffman Tree)
  • java-数据结构-哈夫曼编码(Huffman Coding)
  • java批量修改文件名工具类
  • deepin安装后wps提示缺少字体
  • Unknown initial character set index '45' received from server
  • 阿里云maven公共代理库
  • deepin安装anaconda后,创建图标
  • 论一只爬虫的自我修养——python使用代理
  • Android Studio打开工具栏
  • Android Studio入门小例子
  • 如何证明素数个数无限个
  • java运用itextpdf批量添加书签
  • 《深入 React 技术栈》
  • 【node学习】协程
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • SQLServer之创建显式事务
  • vue学习系列(二)vue-cli
  • WordPress 获取当前文章下的所有附件/获取指定ID文章的附件(图片、文件、视频)...
  • 聊聊redis的数据结构的应用
  • 盘点那些不知名却常用的 Git 操作
  • 异步
  • 阿里云ACE认证之理解CDN技术
  • 国内唯一,阿里云入选全球区块链云服务报告,领先AWS、Google ...
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​力扣解法汇总1802. 有界数组中指定下标处的最大值
  • #git 撤消对文件的更改
  • #pragma 指令
  • #WEB前端(HTML属性)
  • #基础#使用Jupyter进行Notebook的转换 .ipynb文件导出为.md文件
  • $.ajax()
  • (31)对象的克隆
  • (4)事件处理——(2)在页面加载的时候执行任务(Performing tasks on page load)...
  • (5)STL算法之复制
  • (ctrl.obj) : error LNK2038: 检测到“RuntimeLibrary”的不匹配项: 值“MDd_DynamicDebug”不匹配值“
  • (二)fiber的基本认识
  • (二十五)admin-boot项目之集成消息队列Rabbitmq
  • (使用vite搭建vue3项目(vite + vue3 + vue router + pinia + element plus))
  • (原)Matlab的svmtrain和svmclassify
  • (原創) 物件導向與老子思想 (OO)
  • .Net Core和.Net Standard直观理解
  • .net 受管制代码
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .net访问oracle数据库性能问题
  • .net获取当前url各种属性(文件名、参数、域名 等)的方法
  • .NET开源项目介绍及资源推荐:数据持久层 (微软MVP写作)
  • .NET设计模式(11):组合模式(Composite Pattern)
  • .skip() 和 .only() 的使用
  • /etc/skel 目录作用
  • @NoArgsConstructor和@AllArgsConstructor,@Builder
  • [.NET 即时通信SignalR] 认识SignalR (一)
  • [2024最新教程]地表最强AGI:Claude 3注册账号/登录账号/访问方法,小白教程包教包会
  • [Android Pro] android 混淆文件project.properties和proguard-project.txt