检索java TreeMap的所有叶节点

时间:2013-03-22 05:08:15

标签: java map binary-tree treemap

有没有办法检索Java TreeMap的所有叶节点?

我有TreeMap这样的

TreeMap<String, FooBar> myTree = new TreeMap<String, FooBar>(new Comparator<String>() {
  public int compare(String o1, String o2)
  {
    int b1 = Integer.parseInt(o1, 2);
    int b2 = Integer.parseInt(o2, 2);
    return (b1 > b2 ? 1 : (b1 == b2 ? 0 : -2));
  }
});

如何获取此树的所有叶节点?

1 个答案:

答案 0 :(得分:2)

这对我来说没什么意义。存储在叶子上的元素取决于TreeMap的实现如何平衡树。

但是,假设您出于某种原因需要这样做。要实际执行此操作,您需要执行一些操作:编写一个打包在java.util中的类,该类可以访问TreeMap的包私有方法。

在进行了一些挖掘之后,我发现JDK中的默认树实现是一个红黑树,其Entry实现如下所示:

static final class Entry<K,V> implements Map.Entry<K,V> {
    K key;
    V value;
    Entry<K,V> left = null;
    Entry<K,V> right = null;
    Entry<K,V> parent;
    boolean color = BLACK;

    ....

似乎没有任何直接的方法来获得根。但是,如果您可以抓住其中一个Entry,那么您可以遍历父级到根,然后按照您想要的方式执行traversal of the tree({{ 1}} Entryleft == null)。 inorder遍历将保留排序的顺序。

但是,重申一点,我认为你没有理由这么做。您还需要在right == null包中进行调查,以便能够调查这些java.util。但这是代码,为了好玩。 (如果不覆盖JVM上的安全限制,您将无法执行此操作。)

Entry