博客
关于我
二叉树前中后序查找的实现
阅读量: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/

你可能感兴趣的文章
MySQL8修改密码的方法
查看>>
Mysql8在Centos上安装后忘记root密码如何重新设置
查看>>
Mysql8在Windows上离线安装时忘记root密码
查看>>
MySQL8找不到my.ini配置文件以及报sql_mode=only_full_group_by解决方案
查看>>
mysql8的安装与卸载
查看>>
MySQL8,体验不一样的安装方式!
查看>>
MySQL: Host '127.0.0.1' is not allowed to connect to this MySQL server
查看>>
Mysql: 对换(替换)两条记录的同一个字段值
查看>>
mysql:Can‘t connect to local MySQL server through socket ‘/var/run/mysqld/mysqld.sock‘解决方法
查看>>
MYSQL:基础——3N范式的表结构设计
查看>>
MYSQL:基础——触发器
查看>>
Mysql:连接报错“closing inbound before receiving peer‘s close_notify”
查看>>
mysqlbinlog报错unknown variable ‘default-character-set=utf8mb4‘
查看>>
mysqldump 参数--lock-tables浅析
查看>>
mysqldump 导出中文乱码
查看>>
mysqldump 导出数据库中每张表的前n条
查看>>
mysqldump: Got error: 1044: Access denied for user ‘xx’@’xx’ to database ‘xx’ when using LOCK TABLES
查看>>
Mysqldump参数大全(参数来源于mysql5.5.19源码)
查看>>
mysqldump备份时忽略某些表
查看>>
mysqldump实现数据备份及灾难恢复
查看>>