`
hwfantasy
  • 浏览: 21648 次
  • 性别: Icon_minigender_1
  • 来自: 长沙
社区版块
存档分类
最新评论

java自定义二叉树

阅读更多
今天学习的是二叉树的相关知识。二叉树是树的一种,因为他每个结点最多只有2个子结点,所以叫做二叉树。链表实际上很像是树的特殊情况。二叉树有很多种,其中著名的就有二叉查找树和霍夫曼树。
引用
二叉树在图论中是这样定义的:二叉树是一个连通的无环图,并且每一个顶点的度不大于2。有根二叉树还要满足根结点的度不大于2。有了根结点之后,每个顶点定义了唯一的父结点,和最多2个子结点。然而,没有足够的信息来区分左结点和右结点。如果不考虑连通性,允许图中有多个连通分量,这样的结构叫做森林。

以下是我的二叉树的结点类代码:
public class TNode {
	
	private Object obj;
	private TNode parent;
	private TNode left;
	private TNode right;
	
	public TNode(Object obj){
		this.obj = obj;
	}
	
	
	public TNode(){
	}

	public Object getObj() {
		return obj;
	}

	public void setObj(Object obj) {
		this.obj = obj;
	}

	public TNode getParent() {
		return parent;
	}

	public void setParent(TNode parent) {
		this.parent = parent;
	}

	public TNode getLeft() {
		return left;
	}

	public void setLeft(TNode left) {
		this.left = left;
	}

	public TNode getRight() {
		return right;
	}

	public void setRight(TNode right) {
		this.right = right;
	}
}

以下是二叉树的类(其中实现了将一个数组形成二叉查找树)
public class BinaryTree {

	private static TNode root;

	public BinaryTree() {

	}

	/**
	 * 重写二叉树的构造方法
	 * 
	 * @param obj
	 */
	public BinaryTree(Object obj) {
		root = new TNode(obj);
	}

	/**
	 * 将整型数组转化为一棵二叉查找树
	 * 
	 * @param Array
	 *            待转化的数组
	 */
	public void ArraytoTree(int[] Array) {
		if(Array.length == 0){
			throw new RuntimeException("数组长度为0,没有元素用来建树!");
		}
		int first = Array[0];
		root = new TNode(first);
		for (int i = 1; i < Array.length; i++) {
			addofBST(root, Array[i]);
		}
	}

	/**
	 * 将一个数以二叉查找树的顺序插入树中
	 * 
	 * @param node
	 * @param value
	 */
	public void addofBST(TNode node, int value) {
		TNode current;
		if ((Integer) node.getObj() >= value) {
			if (node.getLeft() != null) {
				current = node.getLeft();
				addofBST(current, value);
			}else{
				current = new TNode(value);
				current.setParent(node);
				node.setLeft(current);
			}
		}else{			
			if (node.getRight() != null) {
				current = node.getRight();
				addofBST(current, value);
			}else{
				current = new TNode(value);
				current.setParent(node);
				node.setRight(current);
			}
		}
	}
		

	/**
	 * 以选定模式遍历打印二叉树
	 * 
	 * @param node
	 *            二叉树起始结点
	 * @param style
	 *            模式,1为中左右,0为左中右,-1为左右中
	 */
	public void printTree(TNode node, int style) {
		if (node != null) {
			if (style == 1) {
				// 打印此结点
				Object obj = node.getObj();
				System.out.println(obj);
				// 得到它的左子结点,并递归
				TNode left = node.getLeft();
				printTree(left, style);
				// 得到它的右子结点,并递归
				TNode right = node.getRight();
				printTree(right, style);
			} else if (style == 0) {
				// 得到它的左子结点,并递归
				TNode left = node.getLeft();
				printTree(left, style);
				// 打印此结点
				Object obj = node.getObj();
				System.out.println(obj);
				// 得到它的右子结点,并递归
				TNode right = node.getRight();
				printTree(right, style);
			} else if (style == -1) {
				// 得到它的左子结点,并递归
				TNode left = node.getLeft();
				printTree(left, style);
				// 得到它的右子结点,并递归
				TNode right = node.getRight();
				printTree(right, style);
				// 打印此结点
				Object obj = node.getObj();
				System.out.println(obj);
			}
		}
	}

}
分享到:
评论

相关推荐

    java二叉树

    在Java中,虽然标准库没有内置的二叉树类,但我们可以自定义类来实现。以下是对"java二叉树"这个主题的详细解析。 首先,我们要理解二叉树的基本操作: 1. 插入节点:在二叉树中插入新节点时,需要遵循二叉树的...

    java使用jtree动态实现二叉树

    在Java中动态实现二叉树,即在运行时根据需要创建、更新和操作树结构,这涉及到对数据结构和Swing组件的深入理解。 首先,二叉树是一种特殊的树形数据结构,每个节点最多有两个子节点,分别称为左孩子和右孩子。...

    java实现 二叉树的创建,排序,遍历

    以上代码中,`TreeNode`是自定义的二叉树节点类,包含了节点值、左子节点和右子节点。在实际应用中,二叉树常用于搜索、排序、图形表示等多种场景,其性能往往优于线性数据结构。通过理解并熟练掌握二叉树的创建、...

    java编写的二叉树的各种操作(包括二叉排序树和平衡二叉树)

    但是,如果你需要从底层实现二叉树操作,你需要自定义节点类,包含颜色属性和平衡操作的逻辑。 在“DataStructTest”项目中,你可以找到对这些概念的具体实现,通过阅读和运行代码,你可以更好地理解和实践二叉树...

    Java排序算法包 支持自定义比较条件

    这个"Java排序算法包"提供了对多种排序算法的支持,并且允许用户根据自己的需求自定义比较条件,使得排序功能更加灵活。 1. **排序算法基础**: - 排序是指将一组数据按照特定的顺序进行排列的过程。常见的排序...

    java二叉树算法(转)

    在Java中,我们可以自定义`Node`类来表示二叉树节点,如下所示: ```java class Node { int data; Node left, right; Node(int item) { data = item; left = right = null; } } ``` 博客中的"Java实现二叉树...

    java实现二叉树的Node节点定义手撕8种遍历(一遍过).doc

    在 Java 中,我们需要自定义一个 Node 类来表示二叉树的节点。该类应该包含三个成员变量:value(节点的值)、left(左子节点)和 right(右子节点)。同时,该类还需要提供 getter 和 setter 方法来访问和修改这些...

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

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

    JAVA,画2叉树

    3. **Java Swing**: 虽然本例中使用的是AWT,但Swing是更现代且功能强大的GUI工具包,它构建于AWT之上并提供了更多的自定义选项。 #### 三、核心代码解析 ##### 1. 初始化与主方法 ```java public class MyTree1 ...

    java 之 数据结构 二叉树

    Java标准库中并没有内置的二叉树实现,但可以通过自定义类或者使用`java.util.TreeSet`和`java.util.TreeMap`来实现二叉树的功能。`TreeSet`和`TreeMap`底层都是基于红黑树实现的,它们提供了自动排序和高效的查找...

    红黑树的java实现 (二叉树也有)

    它们提供了高效的键值对存储和集合管理,支持有序操作,如按自然顺序或自定义比较器进行排序。 当我们插入一个新节点时,红黑树会遵循以下步骤: 1. 新插入的节点默认为红色。 2. 插入后可能会破坏红黑树的性质,...

    二叉树java实现

    在Java中实现二叉树,我们可以自定义一个类来表示树节点,并通过节点之间的连接来构建整个树形结构。这篇博客主要讨论了如何在Java中实现二叉树的基本操作,包括递归和非递归方式的三种遍历顺序:前序遍历、中序遍历...

    二叉树、树、森林的java读写操作

    本主题将深入探讨如何在Java中进行二叉树、树和森林的读写操作。 首先,二叉树是一种特殊的树,其中每个节点最多有两个子节点,通常分为左子节点和右子节点。在Java中,我们可以使用类来表示节点,并通过实例化这些...

    Java版数据结构代码,栈,动态数组,队列,链表,二叉树

    在Java中,二叉树通常需要自定义类来实现,因为Java标准库并没有提供现成的二叉树实现。 这些数据结构的实现对于理解算法和提升编程能力至关重要。通过直接导入到Eclipse中,你可以看到完整的代码实现,从而深入...

    java算法实战设计与分析

    在Java中,我们可以自定义二叉树节点类,包含左子节点和右子节点的引用。常见的二叉树操作包括插入、删除、搜索、遍历(前序、中序、后序)等。例如,二叉搜索树是一种有序的二叉树,其左子树上的所有节点值都小于根...

    java创建树和解析树(支持二叉树)

    这可以是将某种格式的文本文件(如XML、JSON或自定义格式)转换为树结构。例如,它可能包含一个`readTree`方法,该方法读取文件,解析其内容,并使用`Node`类实例化树: ```java public class TreeReader { public...

    java编写的GUI树的创立和遍历程序

    6. **数据模型**:在Java中,树的数据模型通常是`DefaultTreeModel`或自定义的`TreeModel`实现。开发者可能创建了一个自定义的树模型,包含树的根节点和子节点,以及添加、删除和更新节点的方法。 7. **...

    Java版剑指Offer全部测试用例

    - **树**:二叉树、平衡树(如AVL树和红黑树)等在搜索、排序和数据组织中具有重要作用。 - **图**:图论问题涉及最短路径、拓扑排序等,常用于网络优化、任务调度等问题。 2. **设计模式**: - **单例模式**:...

    数据结构与算法基础(java版).zip

    在Java中,自定义二叉树节点类并实现遍历(前序、中序、后序)是常见的练习。同时,你将学习到树的插入、删除和查找操作。 6. **ArrayList与LinkedList**:这两个都是Java中的动态数组,但它们在内存管理和性能上有...

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

    此外,开发者可能还使用了一些可视化工具,如`JTree`或者自定义的绘图方法,来展示二叉排序树的结构,帮助用户更好地理解数据在树中的分布。 总的来说,`BiSortTreeGui.java`文件通过Java Swing库实现了二叉排序树...

Global site tag (gtag.js) - Google Analytics