`
Will_Turner
  • 浏览: 69765 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Java模拟二叉树实现

阅读更多

      二叉树的概念不说了,搜索引擎比我说的更加清楚和完整。


      下面的例子允许将各种java.lang.Comparable<T>的子类作为节点元素被添加到二叉树结构当中,并依据二叉树的中序遍历的方式将二叉树结构当中所有元素输出。


      二叉树结构的Java实现类

 

package org.tang.binarytree;

public class BinaryTree<T extends Comparable<T>> {
	private Node<T> root;
	
	public Node<T> getRoot() {
		return root;
	}

	public void setRoot(Node<T> root) {
		this.root = root;
	}
	
	public void addElement(T element){
		if(element == null){
			return;
		}
		Node<T> node = new Node<T>(element);
		if(this.root == null){
			this.root = node;
		}else{
			this.root.addChild(node);
		}
	}
	
	public void printBinaryTree(){
		if(this.root == null){
			System.out.println("当前为空对象,无法打印。");
			return;
		}
		this.root.printNode();
	}
	
	private static class Node<E extends Comparable<E>>{
		private E nodeData;
		private Node<E> left;
		private Node<E> right;
		private Node(E nodeData){
			this.nodeData = nodeData;
		}
		
		private void addChild(Node<E> child){
			if(child == null){
				return;
			}
			if(this.compareTo(child) >= 0){
				if(this.left == null){
					this.left = child;
				}else{
					this.left.addChild(child);
				}
			}else{
				if(this.right == null){
					this.right = child;
				}else{
					this.right.addChild(child);
				}
			}
		}
		
		private int compareTo(Node<E> node){
			return this.nodeData.compareTo(node.nodeData);
		}
		
		private void printNode(){
			if(this.left != null){
				this.left.printNode();
			}
			System.out.println(this.nodeData.toString());
			if(this.right != null){
				this.right.printNode();
			}
		}
	}
}

 

      二叉树实现类的使用方式

 

package org.tang.binarytree;

public class Client {
	public static void main(String[] args){
		BinaryTree<Integer> bt = new BinaryTree<Integer>();
		bt.addElement(101);
		bt.addElement(45);
		bt.addElement(49);
		bt.addElement(1);
		bt.addElement(20);
		bt.addElement(-1);
		bt.printBinaryTree();
		
		BinaryTree<String> bt2 = new BinaryTree<String>();
		bt2.addElement("a");
		bt2.addElement("A");
		bt2.addElement("z");
		bt2.addElement("e");
		bt2.printBinaryTree();
	}
}
0
2
分享到:
评论

相关推荐

    java实现二叉树最佳方法

    在Java中实现二叉树的最佳方法涉及对其逻辑结构和存储结构的理解,以及如何通过代码高效地构建和遍历二叉树。 首先,数据结构可以按逻辑结构分类,其中二叉树属于非线性结构。二叉树的逻辑分类是基于节点与子树之间...

    Java创建二叉树的3种方式

    顺序存储方法通常用于简单的二叉树表示,它通过数组来模拟二叉树的结构。数组的每个位置代表一个节点,根据二叉树的特性,数组中的元素可以是另一个数组,用来存储其子节点。这种方式适用于完全二叉树,即除了最后...

    java下非递归实现平衡二叉树

    平衡二叉树的一个常见类型是AVL树,本文将深入探讨如何在Java下非递归地实现AVL树,并介绍其增删查改的基本操作。 **AVL树的特性:** 1. 左右子树高度差不超过1。 2. 对于任意节点,其左子树和右子树的高度最大差别...

    二叉树的基本操作(java实现)

    本项目是用Java语言实现的二叉树基本操作,主要涉及以下知识点: 1. **二叉树节点类** (BinNode.java) - 一个二叉树节点通常包含三个属性:`value`(存储节点的值),`leftChild`(指向左子节点的引用)和`right...

    Java实现二叉树的先序、中序、后续、层次遍历

    在讲解Java实现二叉树的先序、中序、后序、层次遍历时,我们需要先了解几个关键知识点。 首先,二叉树是一种非常基础且重要的数据结构,每个节点最多有两棵子树,通常称这两棵子树为“左子树”和“右子树”。二叉树...

    java前序中序构造二叉树

    二叉树可以用来模拟具有两种选择的情况,如搜索或排序。 2. **遍历**: - **前序遍历**:访问根节点 -&gt; 遍历左子树 -&gt; 遍历右子树。 - **中序遍历**:遍历左子树 -&gt; 访问根节点 -&gt; 遍历右子树。 - **后序遍历**...

    基于Java实现的二叉树的创建以及三种遍历.zip

    Java作为一种面向对象的编程语言,提供了一种灵活的方式来实现二叉树。 本资料包主要探讨了如何在Java中创建二叉树以及其三种基本遍历方法:前序遍历、中序遍历和后序遍历。首先,我们需要理解二叉树节点的定义,它...

    建二叉树编程语言是java

    #### Java中的二叉树实现 在Java中实现二叉树时,通常会使用类来定义节点结构。每个节点包含三个主要部分: - 节点存储的数据。 - 指向左子节点的引用。 - 指向右子节点的引用。 接下来,我们详细分析提供的代码...

    java二叉树的遍历

    Java二叉树的遍历可以使用递归和非递归两种方式来实现,每种方式都有其优缺。递归遍历的优点是代码简洁易懂,但递归函数的调用可能会导致栈溢出。非递归遍历的优点是可以避免栈溢出,但代码实现起来较为复杂。

    java模拟实现数组链表树图等数据结构

    本项目“java模拟实现数组链表树图等数据结构”旨在帮助初学者通过实际操作来理解这些基本数据结构及其工作原理。 首先,数组是最基础的数据结构,它是一个有序的元素集合,元素可以通过索引来访问。在Java中,数组...

    java实现二叉树的创建及5种遍历方法(总结)

    本文将详细介绍如何使用Java创建二叉树以及实现五种不同的遍历方法:递归先序、中序、后序遍历,非递归的前序和中序遍历。以下是对这些知识点的详细说明: 1. **二叉树的创建**: 创建二叉树通常有两种方式:通过...

    二叉树树的可视化及非递归遍历

    非递归实现通常使用栈来模拟递归调用的过程。初始化一个空栈,将根节点压入栈中,然后进入一个循环,每次弹出栈顶节点,访问它并将其右子节点压入栈(如果存在),再将其左子节点压入栈。 2. 中序遍历:在二叉搜索...

    java 员工管理系统(coursedesign) 二叉树

    以下将详细介绍如何使用Java实现基于二叉树的员工管理系统,以及这个系统可能涉及的关键知识点。 首先,我们需要创建一个`Employee`类,它将代表员工节点。这个类通常包含员工的基本信息,如姓名、ID、职位、工资等...

    java二叉树遍历笔试题-InterviewBit-Solutions:Java中InterviewBit问题的解决方案

    java二叉树遍历笔试题 Java中InterviewBit问题的解决方案 编程 种类 递归 二叉搜索树 广度优先搜索 深度优先搜索 动态规划 贪婪的 图形 几何学 模拟 设计 大批 ID 标题 解决方案 时间 空间 困难 笔记 1 O(n*m) O(1) ...

    在Java语言中实现动态数据结构.pdf

    在Java中实现动态数据结构需要借助Vector类或手动管理的数组来模拟指针操作,从而克服了语言中摒弃指针带来的限制。通过这种方法,可以实现各种灵活且强大的数据结构,比如二叉树。这些方法为Java程序员提供了一种在...

    非递归中序遍历二叉树java代码.docx

    非递归中序遍历是一种在不...总结来说,非递归中序遍历二叉树的方法利用了栈的数据结构,通过模拟递归调用的过程,避免了实际的递归,从而在处理大规模树时提高了效率。这个Java代码示例清晰地展示了如何实现这一过程。

    java-leetcode题解之第111题二叉树的最小深度.zip

    代码分析和学习这些实现可以帮助我们理解如何用Java来处理二叉树问题,提高我们的编程技巧。 学习这个题目的解决方案,我们可以: 1. **理解二叉树的基本操作**:如创建、插入、遍历等。 2. **掌握数据结构和算法*...

    全国计算机等级考试二级Java模拟试题2试题含答案.

    全国计算机等级考试二级Java模拟试题主要测试考生对Java编程语言的理解和应用能力。这些试题涵盖了算法、数据结构、面向对象编程、软件工程等多个核心知识点。 1. 算法的有穷性:算法的有穷性指的是算法必须在执行...

    二叉树的生成与遍利.rar_二叉树

    在"www.pudn.com.txt"文件中,可能是提供了一些关于二叉树遍历的额外资源或示例代码,如C++、Java或Python实现。 总的来说,理解二叉树的生成与遍历对于深入学习数据结构和算法至关重要。掌握这些基本概念和操作将...

Global site tag (gtag.js) - Google Analytics