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

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

二叉树查找技术详解

二叉树在数据结构中扮演着重要角色,常用于查找、排序等操作。本文将详细介绍二叉树的前序、中序、后序查找技术及其实现。

前序查找思想

前序查找法首先检查当前节点是否为目标值。如果是,立即返回该节点。如果不是,则先递归查找左子节点,若找到目标节点则返回,否则继续查找右子节点。

中序查找思想

中序查找法则先递归查找左子节点。如果左子节点未找到目标值,则检查右子节点。若在右子节点中找到目标值,则返回该节点,否则返回null。

后序查找思想

后序查找法则首先递归查找左子节点。如果左子节点未找到目标值,则检查右子节点。若在右子节点中找到目标值,则返回该节点,否则检查当前节点是否为目标值。

二叉树实现代码

package com.shujujiegou;public class Ran {    public static void main(String[] args) {        // 创建二叉树根节点        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.setLeft(node2);        root.setRight(node3);        node3.setRight(node4);                // 前序遍历        System.out.println("前序遍历:");        root.printPreOrder();                // 中序遍历        System.out.println("中序遍历:");        root.printInOrder();                // 后序遍历        System.out.println("后序遍历:");        root.printPostOrder();                // 查找测试        HeroNode emp = root.findPreOrder(1);        if (emp != null) {            System.out.println("找到了节点: " + emp);        } else {            System.out.println("未找到节点5");        }    }}class HeroNode {    private int no;    private String name;    private HeroNode left;    private HeroNode right;    public HeroNode(int no, String name) {        this.no = no;        this.name = name;    }    public void printPreOrder() {        System.out.println(this);        if (left != null) {            left.printPreOrder();        }        if (right != null) {            right.printPreOrder();        }    }    public void printInOrder() {        if (left != null) {            left.printInOrder();        }        System.out.println(this);        if (right != null) {            right.printInOrder();        }    }    public void printPostOrder() {        if (left != null) {            left.printPostOrder();        }        if (right != null) {            right.printPostOrder();        }        System.out.println(this);    }    public HeroNode findPreOrder(int no) {        if (this.no == no) {            return this;        }        HeroNode result = null;        if (left != null) {            result = left.findPreOrder(no);        }        if (result != null) {            return result;        }        if (right != null) {            result = right.findPreOrder(no);        }        return result;    }    public HeroNode findInOrder(int no) {        if (left != null) {            HeroNode result = left.findInOrder(no);            if (result != null) {                return result;            }        }        if (this.no == no) {            return this;        }        if (right != null) {            HeroNode result = right.findInOrder(no);            return result;        }        return null;    }    public HeroNode findPostOrder(int no) {        HeroNode result = null;        if (left != null) {            result = left.findPostOrder(no);        }        if (result != null) {            return result;        }        if (right != null) {            result = right.findPostOrder(no);        }        if (result != null) {            return result;        }        if (this.no == no) {            return this;        }        return null;    }    public void setLeft(HeroNode left) {        this.left = left;    }    public void setRight(HeroNode right) {        this.right = right;    }}

代码运行效果

通过上述代码,可以完成二叉树的查找操作。前序遍历输出顺序为1 2 3 4,中序遍历顺序为2 1 3 4,后序遍历顺序为2 4 3 1。查找测试结果显示能够正确找到目标节点。

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

你可能感兴趣的文章
php面向对象的基础题
查看>>
php面试题二--解决网站大流量高并发方案(从url到硬盘来解决高并发方案总结)...
查看>>
php页面增加自选项,php-在Woocommerce中添加新的自定义默认订购目录选项
查看>>
php页面静态化技术;学习笔记
查看>>
php项目心得以及总结
查看>>
PHP项目集成支付宝PC端扫码支付API(国内支付)
查看>>
php预定义常量&变量
查看>>
R 集成算法③ 随机森林
查看>>
php验证码背景色设置无效
查看>>
php验证邮箱是否有效
查看>>
PHP高性能分布式应用服务器框架-SwooleDistributed
查看>>
PHP高效、轻量级表格数据处理库 OpenSpout
查看>>
R 数据缺失的处理
查看>>
php,nginx重启
查看>>
php:$_ENV 和 getenv区别
查看>>
PHP:cURL error 60: SSL certificate unable to get local issuer certificate
查看>>
PHP:PDOStatement::bindValue参数类型php5和php7问题
查看>>
pickle
查看>>
pickle模块
查看>>
qYKVEtqdDg
查看>>