博客
关于我
二叉树前中后序查找的实现
阅读量:262 次
发布时间:2019-03-01

本文共 5604 字,大约阅读时间需要 18 分钟。

思路分析

  • 前序查找的思想

    • 先判断当前节点的no是否等于要查找的
    • 如果是相等,则返回当前节点
    • 如果不等,则判断当前节点的左子节点是否为空,如果不为空,则递归左子节点前序查找
    • 如果当前节点的左子树递归查找,找到节点就返回,否则继续判断,当前节点的右子节点是否为空,如果不为空,则右子树递归查找
  • 中序查找思想

    • 先判断当前节点的左子节点是否为空,如果不为空,则递归中序查找
    • 如果找到,就返回,如果没有找到,就和当前节点比较,如果是则返回当前节点,否则继续进行右递归中序查找
    • 如果右递归中序查找,找到就返回,否则就null
  • 后序查找思想

    • 先判断当前节点的左子节点是否为空,如果不为空,则递归后序查找
    • 如果找到,就返回,如果没有找到,就判断当前节点的右子节点是否为空,如果不为空,则右递归后进行后序查找,如果找到就返回
    • 如果找不到,就和当前节点比较,如果是则返回,不是则返回null。
package com.shujujiegou;public class ran {       public static void main(String[] args) {           //先需要创建一棵二叉树        erchashu erchashu = new erchashu();        //创建需要的节点        HeroNode root = new HeroNode(1, "qqq");        HeroNode node2 = new HeroNode(2, "www");        HeroNode node3 = new HeroNode(3, "eee");        HeroNode node4 = new HeroNode(4, "rrr");        //说明 我们先手动创建该二叉树 后边学习递归的方式创建二叉树        root.setZuo(node2);        root.setYou(node3);        node3.setYou(node4);        erchashu.setRoot(root);        //测试        //前序遍历 1 2 3 4        erchashu.qianxu();        //中序遍历 2 1 3 4        erchashu.zhongxu();        //后序遍历 2 4 3 1        erchashu.houxu();        //前序查找        HeroNode emp=erchashu.zhongxuchazhao(1);        if (emp != null) {               System.out.printf("找到了,信息为 no=%d,name=%s",emp.getNo(),emp.getName());        }else {               System.out.printf("没有找到no=%d的英雄",5);        }    }}//定义二叉树class erchashu{       private HeroNode root;    public void setRoot(HeroNode root) {           this.root = root;    }    //前序遍历    public void qianxu(){           if(this.root!=null){               this.root.qianxu();        }else {               System.out.println("当前二叉树为空 无法遍历");        }    }    public void zhongxu(){           if(this.root!=null){               this.root.zhongxu();        }else {               System.out.println("当前二叉树为空 无法遍历");        }    }    public void houxu(){           if(this.root!=null){               this.root.houxu();        }else {               System.out.println("当前二叉树为空 无法遍历");        }    }    public HeroNode qianxuchazhao(int no){           HeroNode qq=null;        if(this.root==null){               System.out.println("shu wei kong");        }else {               qq=this.root.qianxuchazhao(no);        }        return  qq;    }    public HeroNode zhongxuchazhao(int no){           HeroNode qq=null;        if(this.root==null){               System.out.println("shu wei kong");        }else {               qq=this.root.zhongxuchazhao(no);        }        return  qq;    }    public HeroNode houxuchazhao(int no){           HeroNode qq=null;        if(this.root==null){               System.out.println("shu wei kong");        }else {               qq=this.root.houxuchazhao(no);        }        return  qq;    }}class HeroNode{       private int no;    private String name;    private HeroNode zuo;    private HeroNode you;    public HeroNode(int no, String name) {           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 getZuo() {           return zuo;    }    public void setZuo(HeroNode zuo) {           this.zuo = zuo;    }    public HeroNode getYou() {           return you;    }    public void setYou(HeroNode you) {           this.you = you;    }    @Override    public String toString() {           return "HeroNode{" +                "no=" + no +                ", name='" + name + '\'' +                '}';    }    public void qianxu(){           System.out.println(this);//先输出父节点        //递归向左子树前序遍历        if(this.zuo!=null){               this.zuo.qianxu();        }        //递归向右子树前序遍历        if(this.you!=null){               this.you.qianxu();        }    }    public void zhongxu(){           //先递归向左子树中序遍历        if(this.zuo!=null){               this.zuo.zhongxu();        }        //输出父节点        System.out.println(this);        //递归向右子树中序遍历        if(this.you!=null){               this.you.zhongxu();        }    }    public void houxu(){           if(this.zuo!=null){               this.zuo.houxu();        }        if(this.you!=null){               this.you.houxu();        }        System.out.println(this);    }    public HeroNode qianxuchazhao(int no){           HeroNode temp=null;        if(this.no==no){               return this;        }        if(this.zuo!=null){               temp=this.zuo.qianxuchazhao(no);        }        if(temp!=null){               return temp;        }else {               System.out.println("meizhaodao");        }        if(this.you!=null){               temp=this.you.qianxuchazhao(no);        }        return temp;    }    public HeroNode zhongxuchazhao(int no){           HeroNode temp=null;        if(this.zuo!=null){               temp=this.zuo.zhongxuchazhao(no);        }        if(temp!=null){               return temp;        }else {               System.out.println("mei zhaodao");        }        if(this.no==no){               return this;        }        if(this.you!=null){               temp=this.you.zhongxuchazhao(no);        }        return temp;    }    public HeroNode houxuchazhao(int no){           HeroNode temp=null;        if(this.zuo!=null){               temp=this.zuo.houxuchazhao(no);        }        if(temp!=null){               return temp;        }        if(this.you!=null){               temp=this.you.houxuchazhao(no);        }        if(temp!=null){               return temp;        }        if(this.no==no){               return this;        }        return temp;    }}

代码运行效果如下:

在这里插入图片描述

转载地址:http://peax.baihongyu.com/

你可能感兴趣的文章
localhost:5000在MacOS V12(蒙特利)中不可用
查看>>
logstash mysql 准实时同步到 elasticsearch
查看>>
Luogu2973:[USACO10HOL]赶小猪
查看>>
mabatis 中出现< 以及> 代表什么意思?
查看>>
Mac book pro打开docker出现The data couldn’t be read because it is missing
查看>>
MAC M1大数据0-1成神篇-25 hadoop高可用搭建
查看>>
mac mysql 进程_Mac平台下启动MySQL到完全终止MySQL----终端八步走
查看>>
Mac OS 12.0.1 如何安装柯美287打印机驱动,刷卡打印
查看>>
MangoDB4.0版本的安装与配置
查看>>
Manjaro 24.1 “Xahea” 发布!具有 KDE Plasma 6.1.5、GNOME 46 和最新的内核增强功能
查看>>
mapping文件目录生成修改
查看>>
MapReduce程序依赖的jar包
查看>>
mariadb multi-source replication(mariadb多主复制)
查看>>
MariaDB的简单使用
查看>>
MaterialForm对tab页进行隐藏
查看>>
Member var and Static var.
查看>>
memcached高速缓存学习笔记001---memcached介绍和安装以及基本使用
查看>>
memcached高速缓存学习笔记003---利用JAVA程序操作memcached crud操作
查看>>
Memcached:Node.js 高性能缓存解决方案
查看>>
memcache、redis原理对比
查看>>