博客
关于我
二叉树前中后序查找的实现
阅读量: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中怎样设置指定ip远程访问连接
查看>>
mysql中数据表的基本操作很难嘛,由这个实验来带你从头走一遍
查看>>
Mysql中文乱码问题完美解决方案
查看>>
mysql中的 +号 和 CONCAT(str1,str2,...)
查看>>
Mysql中的 IFNULL 函数的详解
查看>>
mysql中的collate关键字是什么意思?
查看>>
MySql中的concat()相关函数
查看>>
mysql中的concat函数,concat_ws函数,concat_group函数之间的区别
查看>>
MySQL中的count函数
查看>>
MySQL中的DB、DBMS、SQL
查看>>
MySQL中的DECIMAL类型:MYSQL_TYPE_DECIMAL与MYSQL_TYPE_NEWDECIMAL详解
查看>>
MySQL中的GROUP_CONCAT()函数详解与实战应用
查看>>
MySQL中的IO问题分析与优化
查看>>
MySQL中的ON DUPLICATE KEY UPDATE详解与应用
查看>>
mysql中的rbs,SharePoint RBS:即使启用了RBS,内容数据库也在不断增长
查看>>
mysql中的undo log、redo log 、binlog大致概要
查看>>
Mysql中的using
查看>>
MySQL中的关键字深入比较:UNION vs UNION ALL
查看>>
mysql中的四大运算符种类汇总20多项,用了三天三夜来整理的,还不赶快收藏
查看>>
mysql中的字段如何选择合适的数据类型呢?
查看>>