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

你可能感兴趣的文章
python | orange3,一个神奇的 Python 库!
查看>>
python | pdfminer,一个神奇的 关于PDF 文件的 Python 库!
查看>>
python | pendulum,一个有趣的 日期和时间 Python 库!
查看>>
python | pluginbase,一个神奇的 关于插件框架 的Python 库!
查看>>
python | ply,一个无敌的 词法和语法分析工具 的Python 库!
查看>>
python | py2exe,一个超酷的 Python 库!
查看>>
python | pyautogui,一个超酷的 Python 库!
查看>>
python | pybaobabdt,一个超强的 决策树可视化 Python 库!
查看>>
python | pycco,一个神奇的 Python 库!
查看>>
python | pyg2plot,一个有趣的 数据可视化 Python 库!
查看>>
python | pymc,一个超强的 Python 库!
查看>>
python | pynsist,一个强大的 Python 库!
查看>>
python | pyparsing,一个强大的 Python 库!
查看>>
python | pyqtgraph,一个神奇的 Python 库!
查看>>
python读取文本文件数据
查看>>
python | Python mock对象与测试替身
查看>>
python | Python pandas实现数据追加和合并的最佳方法
查看>>
python | Python 中检查一个数字是否是三态数
查看>>
python | Python 蒙特卡洛模拟
查看>>
python | python-docx,一个超厉害的 Python 库!
查看>>