java语言实现树

首先用Node类定义一个节点,用来存储每个节点的内容:

public class Node {
    // 关键字
    private int keyData;

    // 其他数据
    private int otherData;

    // 左子节点
    private Node leftNode;

    // 右子节点
    private Node rightNode;

    public Node(int keyData, int otherDate) {
        this.keyData = keyData;
        this.otherData = otherDate;
    }
    public int getKeyData() {
        return keyData;
    }

    public void setKeyData(int keyData) {
        this.keyData = keyData;
    }

    public Node getLeftNode() {
        return leftNode;
    }

    public void setLeftNode(Node leftNode) {
        this.leftNode = leftNode;
    }

    public int getOtherData() {
        return otherData;
    }

    public void setOtherData(int otherData) {
        this.otherData = otherData;
    }

    public Node getRightNode() {
        return rightNode;
    }

    public void setRightNode(Node rightNode) {
        this.rightNode = rightNode;
    }

    // 显示方法
    public void display(){
        System.out.println(keyData + "," + otherData);
    }

}

然后定义一个Tree类,并用前序遍历、中序遍历和后序遍历

public class Tree {
    // 根
    private Node root;

    // 插入方法
    public void insert(int keyData, int otherData) {
        Node newNode = new Node(keyData, otherData);

        // 如果说没有节点
        if (root == null) {
            root = newNode;
        } else {
            Node current = root;
            Node parent;
            while (true) {
                parent = current;
                if (keyData < current.getKeyData()) {
                    current = current.getLeftNode();
                    if (current == null) {
                        parent.setLeftNode(newNode);
                        return;
                    }
                } else {
                    current = current.getRightNode();
                    if (current == null) {
                        parent.setRightNode(newNode);
                        return;
                    }
                }
            }
        }
    }

    // 查找方法
    public Node find(int keyData) {
        Node current = root;
        while (current.getKeyData() != keyData) {
            if (keyData < current.getKeyData()) {
                current = current.getLeftNode();
            } else {
                current = current.getRightNode();
            }
            if (current == null) {
                return null;
            }
        }
        return current;
    }

    // 修改方法
    public void change(int keyData, int newOtherData) {
        Node findNode = find(keyData);
        findNode.setOtherData(newOtherData);
    }

    // 先序遍历
    public void preOrder(Node node) {
        if (node != null) {
            node.display();
            preOrder(node.getLeftNode());
            preOrder(node.getRightNode());
        }
    }

    // 中序遍历
    public void inOrder(Node node) {
        if (node != null) {
            inOrder(node.getLeftNode());
            node.display();
            inOrder(node.getRightNode());
        }
    }

    // 后序遍历
    public void endOrder(Node node) {
        if (node != null) {
            endOrder(node.getLeftNode());
            endOrder(node.getRightNode());
            node.display();
        }
    }

    public Node getRoot() {
        return root;
    }
}

测试:

        Tree tree = new Tree();
        tree.insert(80, 80);
        tree.insert(49, 49);
        tree.insert(42, 42);
        tree.insert(30, 30);
        tree.insert(45, 45);
        tree.insert(90, 90);
        tree.insert(150, 150);
        tree.insert(130, 130);
        tree.insert(82, 82);
        System.out.println("前序遍历:");
        tree.preOrder(tree.getRoot());
        System.out.println("中序遍历:");
        tree.inOrder(tree.getRoot());
        System.out.println("后序遍历:");
        tree.endOrder(tree.getRoot());
时间: 2024-10-23 20:13:06

java语言实现树的相关文章

AVL树原理及实现(C语言实现以及Java语言实现)

欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. AVL定义 AVL树是一种改进版的搜索二叉树.对于一般的搜索二叉树而言,如果数据恰好是按照从小到大的顺序或者从大到小的顺序插入的,那么搜索二叉树就对退化成链表,这个时候查找,插入和删除的时间都会上升到O(n),而这对于海量数据而言,是我们无法忍受的.即使是一颗由完全随机的数据构造成的搜索二叉树,从统计角度去分析,在进行若甘次的插入和删除操作,这个搜索二叉树的高度也不能令人满意.这个

JAVA语言搭建白盒静态代码、黑盒网站插件式自动化安全审计平台

近期打算做一个插件化的白盒静态代码安全审计自动化平台和黑盒网站安全审计自动化平台.现在开源或半开源做黑盒网站安全扫描的平台,大多是基于python脚本,安全人员贡献python脚本插件增强平台功能.对自己或身边开发人员,对java语言更熟悉,为了后期维护打算采用java写一个这样的平台.另外白盒代码安全扫描也有Fortify等收费软件,或依赖PMD做代码分析,不过比如新增了什么安全问题,需要自定义或扩展就比较麻烦. 比如一个简单的:现在用struts2存在漏洞,现在需要升级到2.3.28版本,于

java语言之方法的使用与递归算法

1. 什么是方法(函数) java语言的方法类似于其他语言的函数,是一段来完成特定功能的代码片段, 2. 掌握方法的声明  声明格式:修饰符  返回值类型 方法名 (参数列表){  程序代码: return 返回值就: } 方法中的参数: 形式参数:在方法被调用时用于接收外界输入的数据. 实际参数:调用方法时实际传给方法的数据. 方法中的返回值(返回值类型:方法要返回的结果的数据类型,如一个方法没有返回值,必须给出返回值类型 void) (返回值:方法在执行完毕后返还给调用者的数据.) (ret

Java语言进阶篇基本概念

一.Object类.常用API 1.Object类 此类事Java语言中的根类,即所有类的父类.如果一个类没有指定父类,那么默认则继承自Object类. 2.日期时间类 (1)Date类(特定的瞬间).format类(日期/时间格式化子类的抽象类) //创建日期对象 Date date = new Date(); //创建日期格式化对象,指定输出格式,注意:y年M月d日H时m分s秒 DateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss

java语言概念及特点相关问题

1 .什么是计算机语言? 计算机语言:指人与计算机之间的通信,主要由一些指令组成,指令包括"数字.符号和语法等内容",程序员可以通过这些指令来指挥计算机工作. 计算机语言的种类可以分为以下三类: ①机器语言:由二进制的0和1组成的编码,不便于记忆和识别(用于计算机识别). ②汇编语言:采用了英文缩写的标识符,容易识别与记忆. ③高级语言:采用接近于人类的自然语言进行编程,进一步简化了程序编写的过程. Java是一种高级计算机语言. 2.Java语言的特点? "java程序语言

java语言编程基础

java语言基本要素 高级语言如c++.c#.java等都有一些共同性的东西:关键字.标识符. 运算符.注释.数据类型.常量和变量.语句.函数.数组.高级语言在这些要素上大同小异. Java关键字:一些有特定含义,有专门用途的字符串(keyword).Java中关键字均为小写.如do while if int等.不需要记,用多了自然会知道. 标识符 自定义的名称.如类名.变量名.方法名等.合法标识符规则:1 不可使用关键子字 2 不能以数字开头.在java中标识符可有26个英文大小写字母.数字0

Java语言

Java第一次亮相是在1994年由Sun公司技术总监JohnGage提出这个概念,96年正式推广第一个版本jdk1.0,到现在常用的有1.6和被oracle收购后发布的1.7版本. Java语言特点:相对C++语言更加通俗易懂,更没有指针,Java可以在任何一个平台操作系统上运行,程序员只需要编写程序一次就行,Java具有开源.伸缩性.扩展性.同时Java采用多线程可以让程序同步做多个任务. 语言运行方式:创建.java文件--通过javac编译文件生成.class文件在通过jvm虚拟机转换成二

对Java语言中包、修饰符、封装的一些总结

一.包(packsge)   1.包的概念 物理上是文件夹 逻辑上是有逻辑关系的集合   2.包的作用 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用: 包可以避免名字冲突.同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别. 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类.   3.包(package)的命名规范 在包名中,可以使用.号来区分包的级别:包名一般情况下是小写 第一级 指该项目的类型,

java语言复制数组的四种方法

JAVA语言的下面几种数组复制方法中,哪个效率最高? B.效率:System.arraycopy > clone > Arrays.copyOf > for循环 1.System.arraycopy的用法: [java] view plain copy public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 参数:src - 源数组.srcPos - 源数组中的起