相对于上一个,这个二叉树是一个排序二叉树,根据你输入的结点的名称自动按大小排序。结点类Node放在了BinaryTree2类的里边,是为了更好的封装。这个代码相对于上一个更易读,更面向对象!值得一读!
class BinaryTree2
{
class Node
{
private String name;// String类是已经实现了Comparable<String>接口的,可以进行比较
private Node left;
private Node right;
public Node(String name)
{
this.name = name;
}
public void addNode(Node newNode)
{
if (newNode.name.compareTo(this.name) < 0)
{// 放在左子树
if (this.left == null)
{
this.left = newNode;
}
else
{
this.left.addNode(newNode);
}
}
else if (newNode.name.compareTo(this.name) > 0)
{// 放在右子树
if (this.right == null)
{
this.right = newNode;
}
else
{
this.right.addNode(newNode);
}
}
}
public void printNode()
{// 中序遍历
if (this.left != null)
{
this.left.printNode();
}
System.out.print(this.name + "-->");
if (this.right != null)
{
this.right.printNode();
}
}
}
private Node root;
public void add(String name)
{
Node newNode = new Node(name);
if (root == null)
{
root = newNode;
}
else
{
root.addNode(newNode);
}
}
public void print()
{
this.root.printNode();
}
}
class Test2
{
public static void main(String[] args)
{
BinaryTree2 bt = new BinaryTree2();
bt.add("A");
bt.add("D");
bt.add("B");
bt.add("F");
bt.add("E");
bt.add("C");
bt.add("F");
bt.add("G");
bt.print();
}
}
分享到:
相关推荐
2. **重复操作**:取出两个权值最小的节点,创建一个新的内部节点作为它们的父节点,并且把父节点的权值设为两个子节点的权值之和,再将这个新的内部节点放回优先队列。 3. **直至结束**:重复上述步骤,直到优先...
在Java中,我们可以创建一个二叉树节点类,包含节点值、左子节点和右子节点的引用,并实现上述操作的方法。 平衡二叉树(Balanced Binary Tree)是为了优化二叉排序树的性能而提出的。当二叉排序树失去平衡,即树的...
二叉树排序是一种基于二叉树数据结构的排序方法,其基本原理是通过构建一个二叉搜索树(Binary Search Tree, BST),然后按照中序遍历(In-Order Traversal)的方式输出节点数据,得到的结果就是一个有序序列。...
例如Lab_Huffman对应霍夫曼编码,Lab_BTree对应二叉树操作,Lab_calculator可能是一个基于栈的计算器应用,Lab_Link处理链表操作,Lab_Sort实现排序算法,而Lab_Hash则涉及哈希表的使用。 通过这个项目,学习者可以...
在C++中实现平衡排序二叉树,通常会定义一个类模板,以便能处理不同类型的节点数据。类中包含私有成员,如树的高度、节点数量以及根节点。此外,还会有一个公共的内部类来定义树节点,包括节点的关键字、数据、左右...
首先,单链表是一种线性数据结构,其中每个元素(节点)包含数据和一个指向下一个节点的指针。基本操作包括创建链表、插入节点、删除节点、查找节点和打印链表。在实际编程中,这些操作的效率至关重要,因为它们直接...
在这个主题中,我们将深入探讨几个关键概念:单链表、二叉树遍历、折半查找、二叉排序树以及内部排序。 首先,单链表是一种基本的数据结构,由一系列节点组成,每个节点包含数据和指向下一个节点的指针。这种线性...
堆排序表堆的这颗完全二叉树的根节点的值是最大(或最小)的,因此将一个无序序列调整为一个堆,就可以找出这个序列的最大(最小)值,然后将找出的这个值交换到序列的最后(或最前),这样有序序列关键字加 1,无序...
在本文中,我们将深入探讨内部排序算法,包括它们的工作原理、优缺点以及如何使用Python、JavaScript、Java、Go和PHP这些编程语言来实现它们。 1. 冒泡排序:冒泡排序是一种简单的交换排序方法,通过不断比较相邻...
本话题主要探讨六种内部排序算法:直接插入排序、希尔排序、冒泡排序、快速排序、选择排序以及堆排序。这六种排序算法各有优劣,适用于不同的场景,接下来我们将逐一进行详细阐述。 1. **直接插入排序**: 直接...
二叉树是由n(n>=0)个有限节点组成的一个有穷集合,这些节点按照特定规则排列成层次结构。每个节点最多有两个子节点,分别称为左子节点和右子节点。二叉树的形状由其节点的插入顺序决定,这里提到的是排序二叉树,...
在这个主题中,我们将探讨三种特殊的树类型:排序二叉树、AVL树和哈夫曼树,以及如何使用Java语言来实现它们的基本操作,如增、删、改、查。 首先,排序二叉树(Sorted Binary Tree)是一种特殊的二叉树,其中每个...
{//二叉树bt采用二叉链表存储,对bt进行先序遍历 SqStack S; BiTree p; if(bt) { InitStack(S); p=bt; Push(S,bt ); while(!StackEmpty(S)) { printf("%2c",p->data1); if(p->rchild) Push(S, p->rchild)...
2. 堆排序:堆排序利用了完全二叉树的特性,将待排序的序列构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素互换,缩小排序范围,重复此过程直到整个序列有序。堆排序的时间复杂度为O(nlogn),且是原地排序算法...
本项目针对内部排序算法进行了性能分析,通过设计一个测试程序,对比了几种常见内部排序算法的关键字比较次数和移动次数,以帮助我们更直观地理解不同算法的效率差异。以下是关于内部排序算法的一些关键知识点: 1....
对于排序二叉树,中序遍历的结果是一个有序序列。 2. **前序遍历**:先访问当前节点,然后遍历左子树,最后遍历右子树。 3. **后序遍历**:先遍历左子树,然后遍历右子树,最后访问当前节点。 在PHP中,我们可以...
内部排序是计算机科学中一种重要的数据处理方法,它是指在内存中完成的排序过程,无需额外的存储空间。本篇文章将深入探讨六种常见的内部排序算法:希尔排序、直接选择排序、快速排序、直接插入排序、堆排序以及冒泡...
数据结构报告 一元稀疏多项式运算器 唯一确定的二叉树 求最短路径 内部排序算法性能比较
每个元素(节点)包含数据和指向下一个节点的引用。链表分为单链表、双链表和环形链表等类型。在处理动态插入和删除操作时,链表比数组更灵活,因为它们不需要预留连续的内存空间。在最小生成树问题中,链表可能被...
在给定的文件中,二叉树的节点使用了孩子兄弟表示法,即每个节点有两个指针,一个指向其第一个孩子,另一个指向其同级的下一个兄弟节点。 霍夫曼编码是数据压缩的一种方法,通过构建最优的二叉树(霍夫曼树)来实现...