思路分析

代码实现

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;}}

二叉树的前中后序查找+思路分析相关推荐

  1. 二叉树的前,中,后序遍历(思路分析) [Java][数据结构]

    二叉树的前,中,后序遍历(思路分析) 前序遍历: 先输出父节点, 再遍历左子树和右子树 中序遍历: 先遍历左子树, 再输出父节点,再遍历右子树 后序遍历: 先遍历左子树,再遍历右子树,最后输出父节点 ...

  2. 数据结构与算法(java):树-二叉树(二叉查找树(BST)、线索化二叉树、哈夫曼树、平衡二叉树【AVL】、二叉树的前中后序遍历)

    二叉树 1.定义 二叉树 就是度不超过2的树(每个结点最多只有两个子结点).如图 2.特殊二叉树 满二叉树 当二叉树的每一个层的结点树都达到最大值,则这个二叉树就是满二叉树. 完全二叉树 叶结点只能出 ...

  3. 数据结构之二叉树的前中后序遍历以及层序遍历

    学习目标:读完这篇博客搞定二叉树的前中后序以及层序遍历 首先:你应该明白什么是二叉树,下面这幅图就是一个完全二叉树 其实所谓的二叉树就是一个节点有小于等于二个分支的树,可以没有分支,可以有1条分支,可 ...

  4. 深入理解二叉树的前中后序

    一.问题 二叉树的前中后序遍历到底是什么,仅仅是三个顺序不同的 List 吗?为什么多叉树没有中序遍历? 二.遍历框架 所谓二叉树遍历是按某种特定规则,依次对二叉树中的节点进行相应的操作,并且每个节点 ...

  5. Java二叉树的前中后序遍历

    Java二叉树的前中后序遍历 1.前序遍历 1.1前序遍历概念 1.2前序遍历习题 2.中序遍历 2.1中序遍历概念 2.2中序遍历习题 3.后续遍历 3.1后序遍历概念 3.2后序遍历习题 大家好, ...

  6. 二叉树的前中后序遍历之迭代法(非统一风格迭代方式)

    文章目录 前言 一.前序遍历(迭代法) 二.中序遍历(迭代法) 三.后序遍历(迭代法) 总结 前言 「递归的实现就是:每一次递归调用都会把函数的局部变量.参数值和返回地址等压入调用栈中」,然后递归返回 ...

  7. 二叉树的前中后序遍历(考试常考)

    二叉树遍历的概念 二叉树的遍历是按某种规则对二叉树的每个节点均只被访问一次,根据根节点访问位置的不同分为三种:先序遍历(根左右).中序遍历(左根右).后序遍历(左右根).         由于树是通过 ...

  8. Java~二叉树的前中后序遍历的几种方式(递归法,迭代法,标记法等)

    目录 一.结点的定义 二.递归法遍历二叉树 前序遍历 中序遍历 后序遍历 三.迭代(非递归)遍历二叉树 (1).迭代模拟法 前序遍历 中序遍历 后序遍历 (2).空指针标记法 前序遍历 中序遍历 后序 ...

  9. 【数据结构】二叉树的前中后序遍历

    二叉树的三种遍历 1. 创建一棵简单的二叉树 1.1 二叉树结构体实现 1.2 创造一个二叉树结点的函数 1.3 手动创造一棵二叉树 2.为什么要遍历? 3.最重要的知识:由二叉树引出的子问题分析 4 ...

最新文章

  1. 如何在电脑中配置jdk环境变量
  2. AHOI2009 中国象棋
  3. java.util.concurrent包详细分析--转
  4. java 压缩技术_Java压缩技术(三) ZIP解压缩——Java原生实现
  5. PHP生成静态HTML的源代码及用法
  6. 华为高性能服务器刀箱,云平台服务器刀箱
  7. 网站压力测试软件(Apache JMeter)2.13 官方版 Error: Unable to access jarfile ApacheJMeter.jar
  8. 判断 Java 中的空字符串
  9. 一个简单的Kafka Flink Rabbitmq Demo
  10. html5中点击后不发生变化_魔道祖师中资深粉一看就明白的梗,路人见到后都反应不过来...
  11. 微波雷达传感器模块,人体感应雷达应用,让智能家居更安全
  12. 项目是通过文件流的方法查看文件 无法直接在线查看mht后缀文件的解决方案
  13. C语言实现输出九九乘法表
  14. string的取值范围
  15. 腾讯官网生成qq在线客服代码
  16. dota自走棋设置上海服务器位置,Dota2自走棋怎么设置国服 让你轻松进入国服
  17. Java经典“羊车门”概率问题解答
  18. Juniper 一月安全更新修复200多个漏洞
  19. 计算机网络:广域网以及相关协议
  20. 23.5 MySQL架构

热门文章

  1. libjpeg: cannot open
  2. CMake编译opencv
  3. JDK演化系列(1.0~~~1.9)
  4. HDU - 1998 奇数阶魔方
  5. FZU - 2042 The Mad Mathematician 数位dp + 算贡献
  6. 【WC2014】紫荆花之恋【替罪羊思想】【动态点分树】【替罪羊树】
  7. P2634 [国家集训队]聪聪可可(树形dp)
  8. C - And and Pair
  9. 2021牛客NOIP提高组第二场T2——方格计数(组合数计数)
  10. [2021-09-09 T3] 序列/luogu P3943 星空(异或差分+bfs最短路+状压dp)