有没有办法检索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));
}
});
如何获取此树的所有叶节点?
答案 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}} Entry
和left == null
)。 inorder遍历将保留排序的顺序。
但是,重申一点,我认为你没有理由这么做。您还需要在right == null
包中进行调查,以便能够调查这些java.util
。但这是代码,为了好玩。 (如果不覆盖JVM上的安全限制,您将无法执行此操作。)
Entry