简单的排序二叉树
package com.wz.util.tree;
import java.util.ArrayList;
import java.util.Iterator;
/**
* 排序二叉树
*
* @author NumbCoder
*
*/
// 节点
class BinaryNode {
private int data;
BinaryNode lChild;
BinaryNode rChild;
BinaryNode(int t) {
setData(t);
lChild = null;
rChild = null;
}
// 是否为叶子节点
public boolean isLeaf() {
if (lChild == null && rChild == null)
return true;
else
return false;
}
public void setData(int data) {
this.data = data;
}
public int getData() {
return data;
}
}
// 树
public class BinaryTree {
private BinaryNode root;
BinaryTree(BinaryNode root) {
this.root = root;
root.lChild = null;
root.rChild = null;
}
// 向二叉树中插入一个节点
public void insert(BinaryNode n) {
// 树是空的
if (root == null)
root = n;
else {
BinaryNode current = root;
BinaryNode parentNode;
boolean flag = true;
while (flag) {
parentNode = current;
if (n.getData() > current.getData()) {
// 要插入的节点为右孩子节点
current = current.rChild;
if (current == null) {
parentNode.rChild = n;
flag = false;
}
} else if (n.getData() < current.getData()) {
current = current.lChild;
// 要插入的节点为左孩子节点
if (current == null) {
parentNode.lChild = n;
flag = false;
}
}
}
}
}
// 传入一个裝有节点的ArrayList便可自动生成一棵排序二叉树
public void creatBinaryTree(BinaryNode root, ArrayList<BinaryNode> aList) {
Iterator<BinaryNode> it = aList.iterator();
while (it.hasNext()) {
insert(it.next());
}
}
// 先序遍历
public void preOrder(BinaryNode t) {
if (t != null) {
System.out.println(t.getData());
preOrder(t.lChild);
preOrder(t.rChild);
}
}
// 中序遍历
public void inOrder(BinaryNode t) {
if (t != null) {
inOrder(t.lChild);
System.out.println(t.getData());
inOrder(t.rChild);
}
}
// 后序遍历
public void postOrder(BinaryNode t) {
if (t != null) {
postOrder(t.lChild);
postOrder(t.rChild);
System.out.println(t.getData());
}
}
}
泛型的排序二叉树(因为是排序的,所以节点必须具有可比性,但具体的比较规则自己定)
package com.wz.util;
import java.util.ArrayList;
import java.util.Iterator;
/**
* 带泛型的排序二叉树
*
* @author NumbCoder
*
*/
class BinaryNode<T> implements Comparable<T> {
private T data;
BinaryNode<T> lChild;
BinaryNode<T> rChild;
BinaryNode(T t) {
setData(t);
lChild = null;
rChild = null;
}
/**
* 根据T的类型自定义比较方法小于、等于或大于n分别返回负-1、0或1
* 必须实现具体compareTo方法
*/
@Override
public int compareTo(T t) {
return 0;
}
public void setData(T data) {
this.data = data;
}
public T getData() {
return data;
}
//是否为叶子节点
public boolean isLeaf() {
if (lChild == null && rChild == null)
return true;
else
return false;
}
}
//树
public class BinaryTree<T> {
private BinaryNode<T> root;
BinaryTree(BinaryNode<T> root) {
this.root = root;
root.lChild = null;
root.rChild = null;
}
// 向二叉树中插入一个节点
public void insert(BinaryNode<T> n) {
// 树是空的
if (root == null)
root = n;
else {
BinaryNode<T> current = root;
BinaryNode<T> parentNode;
boolean flag = true;
while (flag) {
parentNode = current;
if (n.compareTo(current.getData()) == 1) {
// 要插入的节点为右孩子节点
current = current.rChild;
if (current == null) {
parentNode.rChild = n;
flag = false;
}
} else if( n.compareTo(current.getData()) == -1){
current = current.lChild;
// 要插入的节点为左孩子节点
if (current == null) {
parentNode.lChild = n;
flag = false;
}
}
}
}
}
// 生成一棵排序二叉树
public void creatBinaryTree(BinaryNode<T> root,
ArrayList<BinaryNode<T>> aList) {
Iterator<BinaryNode<T>> it = aList.iterator();
while (it.hasNext()) {
insert(it.next());
}
}
// 先序遍历
private void preOrder(BinaryNode<T> t, ArrayList<T> list) {
if (t != null) {
list.add(t.getData());
preOrder(t.lChild, list);
preOrder(t.rChild, list);
}
}
public Iterator<T> itPreOrder() {
ArrayList<T> list = new ArrayList<T>();
preOrder(root, list);
return list.iterator();
}
// 中序遍历
private void inOrder(BinaryNode<T> t, ArrayList<T> list) {
if (t != null) {
inOrder(t.lChild, list);
list.add(t.getData());
inOrder(t.rChild, list);
}
}
public Iterator<T> itInOrder() {
ArrayList<T> list = new ArrayList<T>();
inOrder(root, list);
return list.iterator();
}
// 后序遍历
private void postOrder(BinaryNode<T> t, ArrayList<T> list) {
if (t != null) {
postOrder(t.lChild, list);
postOrder(t.rChild, list);
list.add(t.getData());
}
}
public Iterator<T> itPostOrder() {
ArrayList<T> list = new ArrayList<T>();
postOrder(root, list);
return list.iterator();
}
}
分享到:
相关推荐
在这个特定的实验——“数据结构实验-二叉树”中,我们将会深入探讨二叉树这一重要的数据结构,它是广东工业大学数据结构课程的一个实践部分。二叉树在很多算法和应用中都扮演着关键角色,例如搜索、排序、文件系统...
在IT领域,数据结构是计算机科学的基础,而二叉树作为一种重要的数据结构,被广泛应用于算法设计、数据库系统、编译器等领域。本教程将详细阐述如何使用JAVA语言实现二叉树的相关操作。 首先,我们要了解二叉树的...
在数据结构的学习中,算术表达式与二叉树的关系是一个重要的主题。Java作为一种流行的编程语言,被广泛用于实现各种数据结构,包括二叉树。本篇将详细讲解基于Java的算术表达式与二叉树相关的知识点。 一、算术...
二叉树是计算机科学中数据结构的一个重要概念,它在许多算法和问题解决中发挥着核心作用。在数据结构的世界里,二叉树是一种特殊的树形结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。这种结构...
### Java基础数据结构—二叉树 #### 一、二叉树概述 二叉树是一种树形数据结构,其中每个节点最多拥有两个子节点:一个称为左子节点,另一个称为右子节点。与一般树相比,二叉树的定义更加严格,这也使其具有更多...
在Java编程中,可能会用到数据结构如`ArrayList`或`LinkedList`来存储箱子和车箱的信息,`TreeSet`或自定义的二叉树结构来快速查找空间。此外,可能会用到递归、迭代或动态规划等算法思想。 总的来说,这个Java项目...
二叉树是数据结构中的一个重要概念,它是一种特殊的树形数据结构,每个节点最多有两个子节点,通常称为左子节点和右子节点。在本程序中,我们主要探讨了二叉树的相关操作。 首先,二叉树的构造是创建二叉树的基础。...
在实际开发中,结合源码和工具,如Java或C++中的数据结构库,我们可以轻松地创建和操作二叉树。对于深入学习,可以参考给定的文档“常用数据结构--线性结构&二叉树.docx”,它可能包含了更多关于线性结构和二叉树的...
### Java基础数据结构—排序二叉树 #### 排序二叉树定义 排序二叉树(也称为二叉搜索树或BST),是一种特殊的二叉树数据结构,它具有以下特性: 1. **节点的数据**:每个节点所含有的数据都是可比较的。 2. **根...
在这个问题中,"二叉树"是一种常见的数据结构用于优化解决方案。Java作为广泛使用的编程语言,提供了丰富的工具和库来实现这种算法。 首先,我们需要理解二叉树的基本概念。二叉树是每个节点最多有两个子节点的数据...
数据结构-二叉树Java实现及其遍历算法,代码示例中实现了中序遍历,简单易学。
通过解决这些问题,学生将能够熟练掌握二叉树数据结构及其在实际问题中的应用。 总的来说,这个实验不仅提供了理论学习的机会,也提供了实践平台,使学生能够在实践中巩固数据结构知识,为未来从事软件开发或相关...
本学习资料包"java数据结构--学习"聚焦于如何在Java环境下理解和应用各种数据结构,旨在提升开发者的技术水平,使其能够编写出更加高效和优化的代码。 1. **数组**:数组是最基本的数据结构,用于存储同类型元素的...
《Java数据结构和算法-带书签目录扫描版》是一本深入探讨Java编程语言中数据结构和算法的书籍。此扫描版特别包含了完整的书签目录,使得读者在电子版阅读时能够快速定位到所需章节,提高了学习和查阅的效率。 在...
### Java基础复习笔记08数据结构-二叉树和二叉树的遍历 #### 一、二叉树概述 二叉树(Binary Tree)是一种重要的数据结构,在计算机科学中有广泛的应用。二叉树中的每个节点最多有两个子节点,分别称为左子节点和右...
java实现二叉树数据结构,简单明了,免费下载
编程实现如下功能: 1、假设二叉树的结点值是字符...2、对二叉树进行先根、中根和后根遍历操作,并输出遍历序列,同时观察输出序列是否与逻辑上的序列一致。 3、统计二叉树的结点个数和叶子结点个数,并分别输出其值。
本文将深入探讨“数据结构 二叉树 java图形界面实现”这一主题,主要围绕二叉树的基本概念、常见操作以及如何在Java环境中结合图形界面进行实现。 首先,二叉树是一种非线性的数据结构,每个节点最多有两个子节点,...
在计算机科学中,数据结构是支撑算法高效运行的基础,而树作为一种非线性的数据结构,因其独特的特性在各种领域中有着广泛的应用。这里我们将深入探讨树中的一个重要分支——二叉树。 首先,我们要了解树的基本概念...
在“数据结构实验3”中,可能包含了用不同编程语言实现的二叉树操作代码,如C、C++、Java或Python。这些源码可能包括了节点结构定义、插入、删除、查找等函数的实现。通过阅读和理解这些源码,你可以学习到如何在...