`
NumbCoder
  • 浏览: 24741 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
最近访客 更多访客>>
社区版块
存档分类
最新评论

Java中的数据结构(3)----强大的二叉树

阅读更多

简单的排序二叉树

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();
	}
}

 

分享到:
评论

相关推荐

    数据结构实验-二叉树

    在这个特定的实验——“数据结构实验-二叉树”中,我们将会深入探讨二叉树这一重要的数据结构,它是广东工业大学数据结构课程的一个实践部分。二叉树在很多算法和应用中都扮演着关键角色,例如搜索、排序、文件系统...

    数据结构-二叉树 JAVA语言实现

    在IT领域,数据结构是计算机科学的基础,而二叉树作为一种重要的数据结构,被广泛应用于算法设计、数据库系统、编译器等领域。本教程将详细阐述如何使用JAVA语言实现二叉树的相关操作。 首先,我们要了解二叉树的...

    java版数据结构的 算术表达式与二叉树源码

    在数据结构的学习中,算术表达式与二叉树的关系是一个重要的主题。Java作为一种流行的编程语言,被广泛用于实现各种数据结构,包括二叉树。本篇将详细讲解基于Java的算术表达式与二叉树相关的知识点。 一、算术...

    数据结构-------二叉树

    二叉树是计算机科学中数据结构的一个重要概念,它在许多算法和问题解决中发挥着核心作用。在数据结构的世界里,二叉树是一种特殊的树形结构,其中每个节点最多有两个子节点,通常称为左子节点和右子节点。这种结构...

    java基础数据结构-二叉树

    ### Java基础数据结构—二叉树 #### 一、二叉树概述 二叉树是一种树形数据结构,其中每个节点最多拥有两个子节点:一个称为左子节点,另一个称为右子节点。与一般树相比,二叉树的定义更加严格,这也使其具有更多...

    二维矩形装箱算法--二叉树--java实现

    在Java编程中,可能会用到数据结构如`ArrayList`或`LinkedList`来存储箱子和车箱的信息,`TreeSet`或自定义的二叉树结构来快速查找空间。此外,可能会用到递归、迭代或动态规划等算法思想。 总的来说,这个Java项目...

    数据结构--树--二叉树

    二叉树是数据结构中的一个重要概念,它是一种特殊的树形数据结构,每个节点最多有两个子节点,通常称为左子节点和右子节点。在本程序中,我们主要探讨了二叉树的相关操作。 首先,二叉树的构造是创建二叉树的基础。...

    常用数据结构 -- 二叉树

    在实际开发中,结合源码和工具,如Java或C++中的数据结构库,我们可以轻松地创建和操作二叉树。对于深入学习,可以参考给定的文档“常用数据结构--线性结构&二叉树.docx”,它可能包含了更多关于线性结构和二叉树的...

    java基础数据结构-排序二叉树

    ### Java基础数据结构—排序二叉树 #### 排序二叉树定义 排序二叉树(也称为二叉搜索树或BST),是一种特殊的二叉树数据结构,它具有以下特性: 1. **节点的数据**:每个节点所含有的数据都是可比较的。 2. **根...

    二维矩形装箱算法--二叉树--java实现.rar

    在这个问题中,"二叉树"是一种常见的数据结构用于优化解决方案。Java作为广泛使用的编程语言,提供了丰富的工具和库来实现这种算法。 首先,我们需要理解二叉树的基本概念。二叉树是每个节点最多有两个子节点的数据...

    数据结构-二叉树Java实现及其遍历算法

    数据结构-二叉树Java实现及其遍历算法,代码示例中实现了中序遍历,简单易学。

    广东工业大学数据结构实验-二叉树抽象数据类型

    通过解决这些问题,学生将能够熟练掌握二叉树数据结构及其在实际问题中的应用。 总的来说,这个实验不仅提供了理论学习的机会,也提供了实践平台,使学生能够在实践中巩固数据结构知识,为未来从事软件开发或相关...

    java数据结构--学习

    本学习资料包"java数据结构--学习"聚焦于如何在Java环境下理解和应用各种数据结构,旨在提升开发者的技术水平,使其能够编写出更加高效和优化的代码。 1. **数组**:数组是最基本的数据结构,用于存储同类型元素的...

    Java数据结构和算法-带书签目录扫描版

    《Java数据结构和算法-带书签目录扫描版》是一本深入探讨Java编程语言中数据结构和算法的书籍。此扫描版特别包含了完整的书签目录,使得读者在电子版阅读时能够快速定位到所需章节,提高了学习和查阅的效率。 在...

    Java基础复习笔记08数据结构-二叉树和二叉树的遍历

    ### Java基础复习笔记08数据结构-二叉树和二叉树的遍历 #### 一、二叉树概述 二叉树(Binary Tree)是一种重要的数据结构,在计算机科学中有广泛的应用。二叉树中的每个节点最多有两个子节点,分别称为左子节点和右...

    java实现二叉树数据结构

    java实现二叉树数据结构,简单明了,免费下载

    数据结构-二叉树(Java实现)

    编程实现如下功能: 1、假设二叉树的结点值是字符...2、对二叉树进行先根、中根和后根遍历操作,并输出遍历序列,同时观察输出序列是否与逻辑上的序列一致。 3、统计二叉树的结点个数和叶子结点个数,并分别输出其值。

    数据结构 二叉树 java图形界面实现

    本文将深入探讨“数据结构 二叉树 java图形界面实现”这一主题,主要围绕二叉树的基本概念、常见操作以及如何在Java环境中结合图形界面进行实现。 首先,二叉树是一种非线性的数据结构,每个节点最多有两个子节点,...

    【数据结构(Java)】树 - 二叉树(csdn)————程序.pdf

    在计算机科学中,数据结构是支撑算法高效运行的基础,而树作为一种非线性的数据结构,因其独特的特性在各种领域中有着广泛的应用。这里我们将深入探讨树中的一个重要分支——二叉树。 首先,我们要了解树的基本概念...

    数据结构试验3-二叉树实验报告含源码

    在“数据结构实验3”中,可能包含了用不同编程语言实现的二叉树操作代码,如C、C++、Java或Python。这些源码可能包括了节点结构定义、插入、删除、查找等函数的实现。通过阅读和理解这些源码,你可以学习到如何在...

Global site tag (gtag.js) - Google Analytics