xross 输入测试样例的时候抛出了异常,定位到似乎在红黑树的实现内部。在 Java 实现内插一些输出,在 TypeScript 实现内插一些输出,二者输出不一样。从第一个点的处理就出现问题了,二者生成并添加的新点不同。handleEvent()
里有什么呢?checkIntersections()
,无非是求交、更新红黑树。求交的部分检查了一下,红黑树的部分犯错误的机会更大吧。
JDK 1.8 的 TreeMap
实现(java/util/TreeMap.java
),第 2216 行、第 2235 行(其实还有更多):
/** From CLR */
private void rotateLeft(Entry<K,V> p) {
// ...
}
/** From CLR */
private void rotateRight(Entry<K,V> p) {
// ...
}
看到这个真是乐了。想想 C# 和 Java 在 Hashtable
类上的名称“借鉴”的事,上文的几个“CLR”注释是不是又添了一些料呢?