我被要求实施基于树的地图,并且不知道我在做什么

时间:2015-02-03 06:21:17

标签: java dictionary tree

作业如下:

(50分)编写一个名为TreeMap的类,一个具有2个类型变量K和V的泛型类(K是键,V是可通过其键检索的值)。该类应具有以下方法:

公共V得到(K键); 此方法应检索存储在指定键下的映射中的值,如果映射中不存在该键,则返回null。

公共V放(K键,V val); 此方法应将指定的值存储在键下。如果密钥已存在于映射中,则应返回先前的值(并由新值覆盖)。如果密钥尚不存在,则该方法应返回null。

公开集< K>的keySet(); 此方法应以Key的自然顺序(例如,字符串的字母顺序)返回包含地图中所有键的Java集。

get和put方法应该在最坏情况下的Θ(log n)时间内运行,而keySet在Θ(n)时间内运行。您应该使用讲座中的红黑树代码作为代码的起点


我不只是在这里张贴期待有人给我答案,我只需要帮助。我在网上搜索过,所有与这个问题相关的内容都是在我的头上/似乎超出了作业的范围,或者说不存在。

get(),put()和keySet()如何成为唯一必需的方法?如果没有rotateRight(),rotateLeft()等方法,红黑树怎么可能工作呢?我是否应该通过使put()方法变得庞大来完成这些方法所做的一切?

你会笑,但这就是我到目前为止所做的一切,不知道从哪里继续。

import java.util.Set;

public class TreeMap301<K, V> {

    K key;
    V value;
    private int size = 0;

public V get(K key){
    return null;
}

public V put(K key, V val){

    size += 1;
    return null;
}

public Set<K> keySet(){
    return null;
}

public int size(){
    return size;
}
}     

我甚至不确定应如何实施。我只是列出所有键的列表和所有值的列表吗?似乎这样会破坏目的。我只是在寻找一些指导。我知道我在这堂课中输了,所以请不要告诉我。

1 个答案:

答案 0 :(得分:0)

我认为你正在寻找提示,而不是让任何人为你做任务(并感谢让我们知道这是一项任务)。以下是一些可以帮助您入门的建议:

  1. 如果您已经拥有红黑树的代码,那么您已经很远了地图。 RB树中的每个节点都应该包含一个键和一个值。

  2. get方法实际上只是在树中搜索一个键并返回您找到的节点中的值。这应该是微不足道的。

  3. put方法并不困难:它使用给定的键和值向树添加新节点(适当处理密钥已存在的情况)。这是调用所有重新平衡代码的地方。

  4. keySet方法稍微复杂一些。它涉及遍历树中的每个节点并将密钥添加到集合中,然后返回该集合。再次没有太大的挑战性。

  5. 如果您希望获得任何相关的具体帮助,请发布您的代码尝试实施,并且我确定会有能够提供帮助的人。