【发布时间】:2015-12-11 19:46:00
【问题描述】:
我正在尝试在 Java 中查找二叉搜索树的高度。这是我的getHeight() 函数。
public int getHeight(RedBlackTree<E> n) {
if (n == EMPTY || n == null) // line 427
return -1;
return 1 + Math.max(getHeight(n.left), getHeight(n.right)); // line 429
}
我不断收到 StackOverflow 异常:
Exception in thread "AWT-EventQueue-0" java.lang.StackOverflowError
at RedBlackTree.getHeight(RedBlackTree.java:427)
at RedBlackTree.getHeight(RedBlackTree.java:429)
at RedBlackTree.getHeight(RedBlackTree.java:429)
at RedBlackTree.getHeight(RedBlackTree.java:429)
at RedBlackTree.getHeight(RedBlackTree.java:429)
...
...
...
注意:我的树很大,所以也许这就是原因?
谁能帮帮我?谢谢!
【问题讨论】:
-
你的树有多高?请注意,如果它构造不好并且包含循环,那肯定会导致问题。
-
我不确定。我会知道该功能是否有效哈哈。
-
那么树是如何构建的?您是否有测试用例来查看它们是否有效? (如果没有,现在是开始测试的好时机......)
-
如果这应该是一棵红黑树,这肯定表明你的树平衡或构造不正确。一个正确平衡的红黑树,大到足以像这样溢出堆栈,它必须大得难以想象,而且在你用完堆栈之前你就会用完内存。
-
@LouisWasserman 这是一棵红黑树。
标签: java tree binary-tree binary-search-tree red-black-tree