你好
我有一个数组列表,其中有一些数字,例如{23,16,45,26,2,5,9}
我想用这个数组列表创建一个二叉搜索树,它是"array"
并且它的元素是具有2
字段的对象,但是在这里我只想使用它的1)digit2)level
字段。是digit
。
这是我的代码,但是会抛出异常。请帮助我,谢谢。
private void method(ArrayList<Element> array) {
DNode header = new DNode(null, null, null);
DNode trailer = new DNode(null, header, null);
header.next = trailer;
DNode node = new DNode(array.get(0), header, trailer);
dList.addLast(node);
header = node
for(int i = 1;i<array.size();i++){
makeBST(node, array.get(i));
}
}
private void makeBST(DNode node, Element e) {
if (!e.equals(node.getElement())) {
DNode nodeOne = new DNode(e, null, null);
if (node.getElement().getDigit() > e.getDigit()) {
node.prev = nodeOne;
} else if (node.getElement().getDigit() < e.getDigit()) {
node.next = node;
}
}
if (e.getDigit() < node.getElement().getDigit()) {
makeBST(node.prev, e);
}
makeBST(node.next, e);
}
例外:
Exception in thread "main" java.lang.StackOverflowError
at OBST.GreedyVersion.makeBST(GreedyVersion.java:43)
at OBST.GreedyVersion.makeBST(GreedyVersion.java:54)
at OBST.GreedyVersion.makeBST(GreedyVersion.java:54)
at OBST.GreedyVersion.makeBST(GreedyVersion.java:54)
第一行例外是针对以下代码行:
if (!e.equals(node.getElement()))
最佳答案
您的递归方法“ private void makeBST(DNode节点,元素e)”需要某种结束条件(一种阻止其调用自身的流路径);实际上,它会不断递归调用自身,这就是导致您的堆栈溢出错误的原因。