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

java语言实现树的更多相关文章

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

    欢迎探讨,如有错误敬请指正 如需转载,请注明出处http://www.cnblogs.com/nullzx/ 1. AVL定义 AVL树是一种改进版的搜索二叉树.对于一般的搜索二叉树而言,如果数据恰好 ...

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

    近期打算做一个插件化的白盒静态代码安全审计自动化平台和黑盒网站安全审计自动化平台.现在开源或半开源做黑盒网站安全扫描的平台,大多是基于python脚本,安全人员贡献python脚本插件增强平台功能.对 ...

  3. 《JAVA语言程序设计》上课笔记

    教学目标:1.使学生了解JAVA课程的性质.定位.作用:为什么要学习JAVA?让学生知道如何学好JAVA: 教学内容: 一.        问几个问题 1.             你们到这里来干什么 ...

  4. JAVA语言之怎样写出高性能的Java代码?

    本文主要向大家介绍了JAVA语言之怎样写出高性能的 Java 代码?通过具体的内容向大家展示,希望对大家学习JAVA语言有所帮助. 在这篇文章中,我们将讨论几个有助于提升Java应用程序性能的方法.我 ...

  5. 数据结构(java语言描述)

    概念性描述与<数据结构实例教程>大同小异,具体参考:http://www.cnblogs.com/bookwed/p/6763300.html. 概述 基本概念及术语 数据 信息的载体,是 ...

  6. 【数据结构】之二叉树(Java语言描述)

    有关树的一些基础知识点请参考[这篇文章]. 本文主要记录Java语言描述的二叉树相关的一些操作,如创建.遍历等. 首先,我们需要一个表示树中节点的数据结构TreeNode,代码如下: public c ...

  7. 数据结构与抽象 Java语言描述 第4版 pdf (内含标签)

    数据结构与抽象 Java语言描述 第4版 目录 前言引言组织数据序言设计类P.1封装P.2说明方法P.2.1注释P.2.2前置条件和后置条件P.2.3断言P.3Java接口P.3.1写一个接口P.3. ...

  8. C++与JAVA语言区别

            转载自:http://www.cnblogs.com/cnryb/archive/2011/01/04/2004141.html "作为一名C++程序员,我们早已掌握了面向对 ...

  9. 数据结构--Java语言描述

    本篇文章是为了记录自己在学习数据结构时的笔记,会对常见的数据结构做基本的介绍以及使用Java语言进行实现.包括 动态数组 栈 队列 链表 二分搜索树 优先队列和堆 线段树 Trie树 并查集 AVL树 ...

随机推荐

  1. 【Kafka源码】KafkaConsumer

    [TOC] KafkaConsumer是从kafka集群消费消息的客户端.这是kafka的高级消费者,而SimpleConsumer是kafka的低级消费者.何为高级?何为低级? 我们所谓的高级,就是 ...

  2. asp .net连接打开数据库初步

    1 #endregion59 WebDriver

  3. 浅谈Android中的组播(多播)

    组播使用UDP对一定范围内的地址发送相同的一组Packet,即一次可以向多个接受者发出信息,其与单播的主要区别是地址的形式.IP协议分配了一定范围的地址空间给多播(多播只能使用这个范围内的IP),IP ...

  4. Python 标准库 urllib2 的使用细节(转)

    http://www.cnblogs.com/yuxc/archive/2011/08/01/2123995.html http://blog.csdn.net/wklken/article/deta ...

  5. 手写particles

    var canvas = document.getElementById('canvas'); var ctx = canvas.getContext('2d'); var Grewer = { in ...

  6. smartClient 1--框架介绍

    一.是什么(以下简称SC)     smartClient 是一个基于web技术的开发框架,主要包括: 一个无需安装的 Ajax/HTML5 客户端引擎 UI组件和服务(采用富客户端RIA)--- 提 ...

  7. JavaEE中的MVC(三)定制Struts——命令模式

    注:本文并不讲解Struts框架,只研究这种思想的使用 JavaEE中的MVC(五)定制Struts--Action跳转Jsp 在讲这个之前,先给你们看一下我服务器1.0版本的截图,是不是很可笑,看起 ...

  8. sqoop的导入导出

    1.知道某列的值的增量导入(mysql------>文件) bin/sqoop import \--connect jdbc:mysql://bigdatcdh01:3306/test \--u ...

  9. h5前端流行的框架

    很多时候别人问你,上手的框架有哪些,其实我们都是知道的,只是一时却也说不上哪些比较,这里想给大家介绍一下,我所遇到的,还算好用的框架,做个分享 1 Bootstrap 官网:http://getboo ...

  10. dnsmasq服务的安装与配置

    在ubuntu16.04上安装dnsmasq服务,在本地做泛域名解析 安装 $ apt-get install dnsmasq -y $ /etc/init.d/dnsmasq start 配置 Dn ...