二叉树的前中后序查找+思路分析

思路分析

在这里插入图片描述

代码实现

package com.atguigu.tree;/*** @创建人 wdl* @创建时间 2021/3/24* @描述*/
public class BinaryTreeDemo {public static void main(String[] args) {//先需要创建一颗二叉树BinaryTree binaryTree = new BinaryTree();//创建需要的节点HeroNode root = new HeroNode(1, "宋江");HeroNode node2 = new HeroNode(2, "吴用");HeroNode node3 = new HeroNode(3, "卢俊义");HeroNode node4 = new HeroNode(4, "林冲");HeroNode node5 = new HeroNode(5, "关胜");//说明,我们先手动创建二叉树,后面我们学习递归方式创建二叉树root.setLeft(node2);root.setRight(node3);node3.setRight(node4);node3.setLeft(node5);binaryTree.setRoot(root);//测试System.out.println("前序遍历");//1,2,3,5,4binaryTree.preOrder();System.out.println("中序遍历");//2,1,5,3,4binaryTree.infixOrder();System.out.println("后序遍历");//2,5,4,3,1binaryTree.postOrder();//        //前序查找
//        //前序查找的次数
//        System.out.println("前序查找");
//        HeroNode resNode = binaryTree.preOrderSearch(5);
//        if(resNode!=null){
//            System.out.println("找到了,信息为no="+resNode.getNo()+",name="+resNode.getName());
//        }else {
//            System.out.println("没有找都no="+15+"的英雄");
//        }//        //中序查找
//        //中序查找的次数
//        System.out.println("中序查找");
//        HeroNode resNode = binaryTree.infixOrderSearch(5);
//        if(resNode!=null){
//            System.out.println("找到了,信息为no="+resNode.getNo()+",name="+resNode.getName());
//        }else {
//            System.out.println("没有找都no="+15+"的英雄");
//        }//后序查找//后序查找的次数System.out.println("后序查找");HeroNode resNode = binaryTree.postOrderSearch(5);if(resNode!=null){System.out.println("找到了,信息为no="+resNode.getNo()+",name="+resNode.getName());}else {System.out.println("没有找都no="+15+"的英雄");}}}//定义BinaryTree二叉树
class BinaryTree{private HeroNode root;public void setRoot(HeroNode root){this.root=root;}//前序遍历public void preOrder(){if(this.root!=null){this.root.preOrder();}else {System.out.println("二叉树为空,无法遍历");}}//中序遍历public void infixOrder(){if(this.root!=null){this.root.infixOrder();}else {System.out.println("二叉树为空,无法遍历");}}//后序遍历public void postOrder(){if(this.root!=null){this.root.postOrder();}else {System.out.println("二叉树为空,无法遍历");}}//前序查找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 root.postOrderSearch(no);}else {return null;}}}//先创建HeroNode节点
class HeroNode{private int no;private String name;private HeroNode left;//默认为nullprivate HeroNode right;//默认为nullpublic HeroNode(int no, String name) {super();this.no = no;this.name = name;}public int getNo() {return no;}public void setNo(int no) {this.no = no;}public String getName() {return name;}public void setName(String name) {this.name = name;}public HeroNode getLeft() {return left;}public void setLeft(HeroNode left) {this.left = left;}public HeroNode getRight() {return right;}public void setRight(HeroNode right) {this.right = right;}@Overridepublic String toString() {return "HeroNode{" +"no=" + no +", name='" + name + '\'' +'}';}//编写前序遍历的方法public void preOrder(){System.out.println(this);//先输出父节点//递归向左子树前序遍历if(this.left!=null){this.left.preOrder();}//递归向右子树前序遍历if(this.right!=null){this.right.preOrder();}}//中序遍历public void infixOrder(){//递归向左子树中序遍历if(this.left!=null){this.left.infixOrder();}System.out.println(this);//输出父节点//递归向右子树中序遍历if(this.right!=null){this.right.infixOrder();}}//后序遍历public void postOrder(){//递归向左子树后序遍历if(this.left!=null){this.left.postOrder();}//递归向右子树后序遍历if(this.right!=null){this.right.postOrder();}System.out.println(this);//输出父节点}/**** @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;}}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/326798.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript Function.arguments 属性详解

转载自 JavaScript Function.arguments 属性详解 arguments属性是正在执行的函数的内置属性,返回该函数的arguments对象。arguments对象包含了调用该函数时所传入的实际参数信息(参数个数、参数值等)。 该属性属于Function对象,所有主流浏览器均支持…

sh(Spring+Spring mvc+hibernate)——BaseDao.java

/** * Title: BaseDao.java * Package org.dao * Description: TODO该方法的主要作用: * author A18ccms A18ccms_gmail_com * date 2017-11-17 上午8:17:28 * version V1.0 */ package org.dao;import java.io.Serializable;/*** * * 项目名称&#xff…

spark sql uv_使用Spark Streaming SQL进行PV/UV统计

作者:关文选,花名云魄,阿里云E-MapReduce 高级开发工程师,专注于流式计算,Spark Contributor1.背景介绍PV/UV统计是流式分析一个常见的场景。通过PV可以对访问的网站做流量或热点分析,例如广告主可以通过PV…

asp.net core mvc实现伪静态功能

在大型网站系统中,为了提高系统访问性能,往往会把一些不经常变得内容发布成静态页,比如商城的产品详情页,新闻详情页,这些信息一旦发布后,变化的频率不会很高,如果还采用动态输出的方式进行处理…

二叉树删除节点+思路分析

思路分析 代码实现 ![在这里插入代码片](https://img-blog.csdnimg.cn/20210325193201194.png?x-oss-processimage/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3FxXzQ1NzgzNjYw,size_16,color_FFFFFF,t_70)

sql mysql 命令计算年龄 格式化日期

命令计算年龄 <if test"query.startAge ! null" >and <![CDATA[ timestampdiff(year, substring(u.idno, 7, 8), now()) > startAge ]]></if>select timestampdiff(year, substring(110101199309228395, 7, 8), now());SELECT DATE_FORMAT(N…

比较正宗的验证邮箱的正则表达式js代码详解

转载自 比较正宗的验证邮箱的正则表达式js代码详解 邮箱正则最正宗的一条正则语句是^[a-z0-9]([._\\-]*[a-z0-9])*([a-z0-9][-a-z0-9]*[a-z0-9].){1,63}[a-z0-9]$ 下面我们来讲解一下 fuchangxi的正则&#xff1a; /^([a-zA-Z0-9_-])([a-zA-Z0-9_-])(.[a-zA-Z0-9_-])/ 开…

ddm模型公式_简单判断目前行情——从股利贴现模型切入

本文目录&#xff1a;1.介绍股利贴现模型&#xff1b;2.以贵州茅台为例根据现有情况估计模型内部各参数&#xff1b;3.得出结论&#xff1b;一、股利贴现模型&#xff08;DDM&#xff09;我们知道给一项资产定价最朴素的想法是将它未来产生的所有现金流以一定的贴现率贴现至当前…

sh(Spring+Spring mvc+hibernate)——IDeptDao.java

/** * Title: IDeptDao.java * Package org.dao * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-21 上午9:42:32 * version V1.0 */ package org.dao;import java.util.List;import org.entity.Dept;/** * * …

解决Html5用canvas绘制不出来图片的问题

转载自 解决Html5用canvas绘制不出来图片的问题 如果使用html5的ctx.drawImage(img,0,0);绘制不出来&#xff0c; 就改为&#xff1a;img.onload function(){ctx.drawImage(img,0,0);} 只有img 加载完了&#xff0c;你画它才有意义。

Hutool 日期时间工具-DateUtil使用

java中获取当月1号零时零分的时间 /*** 获得当月1号零时零分零秒* return*/ public Date initDateByMonth(){Calendar calendar Calendar.getInstance();calendar.setTime(new Date());calendar.set(Calendar.DAY_OF_MONTH, 1);calendar.set(Calendar.HOUR_OF_DAY, 0);calenda…

顺序存储二叉树

package com.atguigu.tree;/*** 创建人 wdl* 创建时间 2021/3/25* 描述*/ public class ArrBinaryTreeDemo {public static void main(String[] args) {int[] arr{1,2,3,4,5,6,7};//创建一个ArrBinaryTreeArrBinaryTree arrBinaryTree new ArrBinaryTree(arr);arrBinaryTree.p…

分布式事务与一致性算法Paxos amp; raft amp; zab

1.CAP原理 要想数据高可用&#xff0c;就得写多份数据写多分数据就会导致数据一致性问题数据一致性问题会引起性能问题 2.一致性模型 弱一致性最终一致性&#xff08;一段时间达到一致性&#xff09;强一致 1、2 异步冗余&#xff1b;3是同步冗余 3. 扩展服务的方案 数据分区&…

sh(Spring+Spring mvc+hibernate)——IEmpDao.java

/** * Title: IEmpDao.java * Package org.dao * Description: TODO该方法的主要作用&#xff1a; * author A18ccms A18ccms_gmail_com * date 2017-11-21 上午9:43:52 * version V1.0 */ package org.dao;import java.util.List;import org.entity.Emp;/** * * 项…

打开数据库_数据库客户端navicat遇到问题怎么办?

前面的文章介绍了&#xff1a;mysql数据库如何安装&#xff0c;客户端navicat如何安装。下面是客户端navicat使用过程中常见问题的解决办法。【问】使用navicat连接数据库报错信息&#xff1a;12511251Client does not support authentication protocol requested by server,co…

关于MybatisPlus查询条件 or 并集 某字段空字符串和NULL问题 sql

下面的史对的 <select id"getHouseIsExist" resultType"com.easy.hotel.pms.api.entity.House" >select * from house h<where>h.del_flag 0<if test"estateId ! null and estateId ! ">and h.estate_id #{estateId}</i…

遍历线索化二叉树+图解

图解 代码实现 package com.atguigu.tree.threadedbinarytree;/*** 创建人 wdl* 创建时间 2021/3/25* 描述*/ public class ThreadedBinaryTreeDemo {public static void main(String[] args) {//测试一把中序线索化二叉树的功能HeroNode root new HeroNode(1, "tom&quo…

JS实现星星评分功能实例代码(两种方法)

转载自 JS实现星星评分功能实例代码(两种方法) 一、方法1 1、用到图片 2、结构和样式 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Document</title><style>ul {padding-left: 0;…

SQL on Linux Run on Docker

摘要 SQL Server 2016以及SQL on Linux版本已经支持跑在Docker容器中&#xff0c;也展示微软拥抱开源的决心和勇气。这篇博文就是以SQL on Linux为例&#xff0c;看看如何将SQL Server实例部署在Docker容器中。 背景 大概在两个月之前&#xff0c;在SQL On Linux刚发布预览版本…

三条中线分的六个三角形_八年级数学上册:三角形已知两条边如何求第三边

三角形一、定义&#xff1a;由不在同一条直线上的三条线段首尾顺次相接所组成的平面图形叫做三角形。1、三角形的内角&#xff1a;三角形的没两条边所组成的角叫做三角形的内角2、三角形的外角&#xff1a;三角形的任意一边与另一边的反向延长线所组成的角叫做三角形的外角。二…