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

思路分析

在这里插入图片描述

代码实现

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,一经查实,立即删除!

相关文章

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

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

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

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

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

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

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

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

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

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

遍历线索化二叉树+图解

图解 代码实现 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;三角形的任意一边与另一边的反向延长线所组成的角叫做三角形的外角。二…

Xamarin的坑 - 绑定(二) - 高德iOS SDK(.Framework)绑定的一些事

编者语&#xff1a;入门总是用一个hello world&#xff0c;总会让人觉得写code会是很容易的事。开篇绑定了一下微信SDK,不会有太多的难点&#xff0c;可是接下来的这个例子如果欠缺一些耐心&#xff0c;估计你整个人就崩溃了(我从来不会放弃任何的事)。ps这里得谢谢CSDN回帖的人…

android 监听安装来源_Flutter插件开发之APK自动安装

点击上方的终端研发部&#xff0c;右上角选择“设为星标”每日早9点半&#xff0c;技术文章准时送上公众号后台回复“学习”&#xff0c;获取作者独家秘制精品资料往期文章记五月的一个Android面试经今日头条屏幕适配方案落地研究图解算法&#xff1a;说一道字节跳动的算法题除…

JavaScript学习总结(一)——JavaScript基础

转载自 JavaScript学习总结(一)——JavaScript基础 一、JavaScript语言特点 1.1、JavaScript是基于对象和事件驱动的(动态的) 它可以直接对用户或客户输入做出响应&#xff0c;无须经过Web服务程序。它对用户的响应&#xff0c;是采用以事件驱动的方式进行的。所谓事件驱动…

idea下使用springinitializr创建项目时 初始化失败的解决

idea自带的地址无使用使用阿里的就可以了 idea下使用springinitializr创建项目时 初始化失败的解决 周山 关注 2020.08.05 13:32:26字数 10阅读 1,085 image.png 修改初始化创建时Custom处 https://start.aliyun.com/ image.png

如何使Mac Docker支持SQL on Linux容器Volume特性

问题引入 这天老鸟火急火燎的找到菜鸟&#xff1a;“鸟儿啊&#xff0c;按照你之前的文章SQL on Linux Run on Docker&#xff0c;当我销毁SQL on Linux Docker容器以后&#xff0c;我容器中的所有数据库数据丢失啦&#xff0c;怎么办&#xff0c;怎么办啊&#xff1f;”。菜鸟…

JavaScript学习总结(二)——逻辑Not运算符详解

转载自 JavaScript学习总结(二)——逻辑Not运算符详解 在JavaScript 中&#xff0c;逻辑NOT运算符与C和Java中的逻辑 NOT 运算符相同&#xff0c;都由感叹号&#xff08;!&#xff09;表示。与逻辑 OR 和逻辑 AND 运算符不同的是&#xff0c;逻辑 NOT 运算符返回的一定是 Boo…

赫夫曼树+图解

图解 代码实现 package com.atguigu.huffmanTree;import javax.swing.*; import java.awt.geom.RoundRectangle2D; import java.util.ArrayList; import java.util.Collections; import java.util.List;/*** 创建人 wdl* 创建时间 2021/3/26* 描述*/ public class HuffmanTree…

四足爬行机器人运动_有自我意识机器人横空出世,还能自我复制,专家表示需警惕其失控...

有自我意识是什么样的&#xff1f;人类自身其实就是有自我意识的生命体&#xff0c;那作为有自我意识的生命体&#xff0c;你想过自我意识是指哪些特征吗&#xff1f;指尖科技说小编先跟你探讨一下&#xff1a;1.主动做事情。就是说在没有其他人控制的情况下&#xff0c;它可以…

微软AirSim,一个无人机和机器人的模拟器

微软开发并开源了AirSim&#xff0c;一个用于模拟无人机在全世界的飞行的工具。这个模拟器基于虚幻引擎&#xff08;Unreal Engine&#xff09;构建&#xff0c;微软很快会增加对机器人和其它类型移动设备的支持。 微软在内部开发了航空信息系统和机器人平台&#xff0c;这个研…

JavaScript学习总结(四)——逻辑OR运算符详解

转载自 JavaScript学习总结(四)——逻辑OR运算符详解 在JavaScript中&#xff0c;逻辑OR运算符用||表示 var bTrue true;var bFalse false;var bResult bTrue || bFalse; 下面的真值表描述了逻辑AND运算符的行为: 运算数 1运算数 2结果truetruetruetruefalsetruefals…

LEANSOFT领航员 – 基于Docker的DevOps实战培训

2016年&#xff0c;LEANSOFT推出了一系列广受开发人员欢迎的培训&#xff0c;包括《构建高效DevOps团队》&#xff0c;《基于Azure的容器化DevOps数据中心》和《Docker基础培训》。在这些培训中&#xff0c;我们得到了很多反馈&#xff0c;大家对使用Docker来支持DevOps的场景有…