博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
java语言实现树
阅读量:5787 次
发布时间:2019-06-18

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

首先用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());

 

转载于:https://www.cnblogs.com/y3596597/p/6880484.html

你可能感兴趣的文章
Puppet 配置管理工具安装
查看>>
Bug多,也别乱来,别被Bug主导了开发
查看>>
sed 替换基础使用
查看>>
高性能的MySQL(5)创建高性能的索引一B-Tree索引
查看>>
oracle备份与恢复--rman
查看>>
图片变形的抗锯齿处理方法
查看>>
Effective C++ Item 32 确保你的 public 继承模子里出来 is-a 关联
查看>>
phpstorm安装laravel-ide-helper实现自动完成、代码提示和跟踪
查看>>
python udp编程实例
查看>>
TortoiseSVN中图标的含义
查看>>
Tasks and Back stack 详解
查看>>
关于EXPORT_SYMBOL的作用浅析
查看>>
成功的背后!(给所有IT人)
查看>>
在SpringMVC利用MockMvc进行单元测试
查看>>
Nagios监控生产环境redis群集服务战
查看>>
Angular - -ngKeydown/ngKeypress/ngKeyup 键盘事件和鼠标事件
查看>>
Android BlueDroid(一):BlueDroid概述
查看>>
Java利用httpasyncclient进行异步HTTP请求
查看>>
宿舍局域网的应用
查看>>
html代码究竟什么用途
查看>>