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

你可能感兴趣的文章
Mysql学习总结(5)——MySql常用函数大全讲解
查看>>
Mysql学习总结(60)——并发量大、数据量大的互联网业务数据库设计规范总结
查看>>
Mysql学习总结(61)——MySQL优化之DBA级优化整理汇总
查看>>
Mysql学习总结(62)——MySQL连接com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link问题
查看>>
Mysql学习总结(63)——Mysql数据库架构方案选择与分析
查看>>
Mysql学习总结(64)——Mysql配置文件my.cnf各项参数解读
查看>>
Mysql学习总结(65)——项目实战中常用SQL实践总结
查看>>
Mysql学习总结(66)——设置MYSQL数据库编码为UTF-8
查看>>
Mysql学习总结(67)——MYSQL慢查询日志
查看>>
Mysql学习总结(68)——MYSQL统计每天、每周、每月、每年数据 SQL 总结
查看>>
Mysql学习总结(69)——Mysql EXPLAIN 命令使用总结
查看>>
Mysql学习总结(6)——MySql之ALTER命令用法详细解读
查看>>
Mysql学习总结(70)——MySQL 优化实施方案
查看>>
Mysql学习总结(71)——MySQL 重复记录查询与删除总结
查看>>
Mysql学习总结(71)——数据库介绍(MySQL安装 体系结构、基本管理)再回顾
查看>>
Mysql学习总结(72)——MySQL 开发者开发,设计规范再总结
查看>>
Mysql学习总结(73)——MySQL 查询A表存在B表不存在的数据SQL总结
查看>>
Mysql学习总结(74)——慢SQL!压垮团队的最后一根稻草!
查看>>
Mysql学习总结(75)——并发量大、数据量大的互联网业务数据库设计军规
查看>>
Mysql学习总结(76)——MySQL执行计划(explain)结果含义总结
查看>>