使用JAVA中的List构建二叉排序树。其中,iterator方法不知道怎么样写,请大伙支援?代码如下:
import java.util.ArrayList; import java.util.Iterator; import java.util.List; public class BinaryTreeList<E> extends AbstractSingleLinkedList<E> implements List<E> ,java.io.Serializable { private static final long serialVersionUID = -5672690815694732101L; private Entry<E> root; private int size ; public BinaryTreeList() { this.root = null; } public boolean add(E e) { Entry<E> newEntry = new Entry<E>(e,null,null); if (this.root == null) { this.root = newEntry; } else { Comparable<? super E> k = (Comparable<? super E>) e; Entry<E> currentEntry = this.root; Entry<E> parentEntry = null; int result = 0; while (currentEntry != null) { result = k.compareTo(currentEntry.data); parentEntry = currentEntry; if (result > 0) { currentEntry = currentEntry.rigthChild; } else { currentEntry = currentEntry.leftChild; } } if (result > 0) { parentEntry.rigthChild = newEntry; } else { parentEntry.leftChild = newEntry; } } size ++; return true; } public Entry<E> getRoot() { return this.root; } /** * 使用递归遍历tree * @param tree * @param result * @return */ private void preOrder(Entry<E> tree,List<E> result) { if (tree != null) { preOrder(tree.leftChild,result); result.add(tree.data); preOrder(tree.rigthChild,result); } } public List<E> showTree() { List<E> result = new ArrayList<E>(size); preOrder(getRoot(),result); return result; } @Override public Iterator<E> singleListIterator() { /** * 这个地方怎么样实现呢 ? * 就是怎么样把递归写成循环? */ return new Iterator<E>() { private Entry<E> current = root; @Override public boolean hasNext() { return false; } @Override public E next() { return null; } @Override public void remove() { throw new UnsupportedOperationException("can not remove"); } }; } @Override public E get(int index) { throw new UnsupportedOperationException("can not get"); } @Override public int size() { return size; } public static class Entry<E>{ E data; Entry<E> leftChild; Entry<E> rigthChild; public Entry(E e,Entry<E> leftChild,Entry<E> rigthChild) { this.data = e; this.leftChild = leftChild; this.rigthChild = rigthChild; } } }
测试类如下:
import junit.framework.TestCase; import org.junit.Test; public class BinaryTreeListTest extends TestCase { @Test public void testAdd() { BinaryTreeList<Integer> list = new BinaryTreeList<Integer>(); list.add(381); list.add(12); list.add(410); list.add(9); list.add(40); list.add(394); list.add(540); list.add(35); list.add(190); list.add(476); list.add(760); list.add(146); list.add(445); list.add(600); list.add(800); //preOrder(list.getRoot()); for (Integer val : list.showTree()) { System.out.print(val); System.out.print('\t'); } } /* public static void preOrder(BinaryTreeList.Entry<Integer> tree) { if (tree != null) { preOrder(tree.leftChild); System.out.print(tree.data); System.out.print('\t'); preOrder(tree.rigthChild); } } */ }
输出结果:
9 12 35 40 146 190 381 394 410 445 476 540 600 760 800
不足之处:BinaryTreeList 的对象不能使用foreach遍历出结果,必须先调用 list.showTree() 生成一个arrayList。求教:iterator怎么实现呢?
相关推荐
本文将详细解释如何将有序数组转换为二叉搜索树,包括问题描述、解题思路、Java 和 Python 实现代码以及时间和空间复杂度分析。 问题描述 给定一个整数数组 nums,其中元素已经按升序进行了排序,请将其转换为一棵...
17循环链表 18双项链表 19链式栈 20链式队列 21STL_list类 22基数排序 23属 24二叉树 25二叉树找数 26红黑树 27红黑树_0 28红黑树_1 29红黑树_2 30红黑树_3 31红黑树_4 32红黑树_5 33红黑树_6 34堆 35堆排序 36...
17循环链表 18双项链表 19链式栈 20链式队列 21STL_list类 22基数排序 23属 24二叉树 25二叉树找数 26红黑树 27红黑树_0 28红黑树_1 29红黑树_2 30红黑树_3 31红黑树_4 32红黑树_5 33红黑树_6 34堆 35堆排序 36...
- **TreeMap**:通过红黑树实现,红黑树是一种自平衡的二叉查找树。 #### Set `Set`接口继承自`Collection`接口,不允许有重复元素。 ##### 概述 `Set`的主要实现包括`HashSet`、`LinkedHashSet`、`TreeSet`等。...
本资料主要探讨了Java中实现排序的12种方法,其中包括一些经典的排序算法以及基于集合的排序方式。以下是对这些排序算法的详细介绍: 1. **计数排序**:计数排序是一种非比较型排序算法,适用于整数排序。它通过...
Java集合排序及Java集合类详解 Java集合框架是Java语言中最重要、最常用的部分之一,它能够使开发者更方便地处理数据结构。Java集合框架主要包括Collection、List、Set、Map四个接口,它们分别实现了不同的数据结构...
标题中的“DSAA_堆排序java实现_源码”表明这是一个关于数据结构与算法分析(Data Structures and Algorithms Analysis,简称DSAA)的资料包,主要关注堆排序算法的Java实现。堆排序是一种高效的排序算法,它利用了...
Java中,TreeSet和TreeMap实现了红黑树,而PriorityQueue内部使用了堆数据结构。 3. 图: 图是由节点(顶点)和连接节点的边构成,可以表示复杂的关系。图分为有向图和无向图,Java中没有直接提供图的实现,但可以...
- 使用Java集合框架中的数据结构(如List、Set)可能会在某些操作中提供便利。 - Java的异常处理机制保证了程序在遇到错误时的健壮性。 6. **应用领域**: - 二叉树在计算机科学中有广泛应用,如文件系统、...
第八章讲述了查找的基本概念和实现,包括顺序查找、折半查找、查找树(二叉查找树、AVL树、B-树)以及哈希技术(哈希表、哈希函数、冲突解决)。这些内容对于实现高效的查找操作至关重要。 第九章则讨论了排序问题...
根据提供的文件标题“数据结构Java版本.pdf”及描述“适合热爱学习Java的,用于帮助复习文档”,我们可以推测这份文档主要涵盖了使用Java语言实现的各种数据结构的相关知识与实践内容。下面将详细阐述可能涉及的一些...
在Java中,我们可以使用`PriorityQueue`类来实现堆排序,或者自定义堆结构进行排序。 - **红黑树**:红黑树是一种自平衡的二叉查找树,它的插入、删除和查找操作的时间复杂度都是O(logn)。Java中的`java.util....
除此之外,Java数据结构还包括链表、栈、队列、树(如二叉搜索树、AVL树、红黑树等)、图、哈希表等。每种数据结构都有其特定的应用场景和优缺点,选择合适的数据结构能显著提高程序的性能。 在实际编程中,理解并...
1. **排序+List**:首先,将所有服务器节点的哈希值放入一个数组,然后使用排序算法(如归并排序、快速排序等)对数组进行排序,再将排序后的结果放入List中。之后,针对新的请求,可以在List中找到第一个大于请求...
Java的LinkedList实现了List接口,支持双向遍历。 3. ArrayList和Vector:都是基于动态数组实现的列表,ArrayList提供了更快的随机访问速度,而Vector是线程安全的。 4. LinkedList:适用于频繁插入和删除操作,因为...
- **TreeSet**: 这种实现通过红黑树(一种自平衡二叉搜索树)来存储元素,可以自然地对元素进行排序。`TreeSet`保证了集合中元素的有序性,并且提供了`subSet`等方法来获取子集。 - **LinkedHashSet**: 这种实现...
第九章对排序算法进行了讲解,涵盖了排序的基本概念、插入类排序(直接插入排序、折半插入排序和希尔排序)以及查找树排序(如二叉查找树排序和AVL树排序)。 该书整体上采用Java语言描述数据结构与算法的实现,将...
TreeSet实现了SortedSet接口,它使用红黑树进行数据存储,元素默认按照自然排序或自定义比较器进行排序。 Queue是Java集合框架中的队列接口,用于处理先进先出(FIFO)的数据结构。LinkedList除了实现List接口外,...
此外,Java集合框架(Collections Framework)提供了丰富的接口和类,如List、Set、Map等接口,以及ArrayList、LinkedList、HashSet、HashMap等实现类,它们都基于不同的数据结构。熟悉这些接口和类的使用,能够帮助...
Java面试经验整理涉及了Java集合框架的核心知识点,特别是List、Set和Map三个接口及其子接口和实现类的特性、用途和性能比较。以下是对这部分内容的知识点总结: 1. Java集合框架结构 Java集合框架由Collection...