博客
关于我
二叉树前中后序查找的实现
阅读量: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中使用IN()查询到底走不走索引?
查看>>
Mysql中使用存储过程插入decimal和时间数据递增的模拟数据
查看>>
MySql中关于geometry类型的数据_空的时候如何插入处理_需用null_空字符串插入会报错_Cannot get geometry object from dat---MySql工作笔记003
查看>>
mysql中出现Incorrect DECIMAL value: '0' for column '' at row -1错误解决方案
查看>>
mysql中出现Unit mysql.service could not be found 的解决方法
查看>>
mysql中出现update-alternatives: 错误: 候选项路径 /etc/mysql/mysql.cnf 不存在 dpkg: 处理软件包 mysql-server-8.0的解决方法(全)
查看>>
Mysql中各类锁的机制图文详细解析(全)
查看>>
MySQL中地理位置数据扩展geometry的使用心得
查看>>
Mysql中存储引擎简介、修改、查询、选择
查看>>
Mysql中存储过程、存储函数、自定义函数、变量、流程控制语句、光标/游标、定义条件和处理程序的使用示例
查看>>
mysql中实现rownum,对结果进行排序
查看>>
mysql中对于数据库的基本操作
查看>>
Mysql中常用函数的使用示例
查看>>
MySql中怎样使用case-when实现判断查询结果返回
查看>>
Mysql中怎样使用update更新某列的数据减去指定值
查看>>
Mysql中怎样设置指定ip远程访问连接
查看>>
mysql中数据表的基本操作很难嘛,由这个实验来带你从头走一遍
查看>>
Mysql中文乱码问题完美解决方案
查看>>
mysql中的 +号 和 CONCAT(str1,str2,...)
查看>>
Mysql中的 IFNULL 函数的详解
查看>>