嗨 我有其中有几个电话号码,它像{23,16,45,26,2,5,9}
一个数组列表,我想打一个二叉搜索树与此数组列表,这是"array"
其元素是具有对象2
领域,1)digit2)level
但这里我只是想用它的digit
字段。还有dList
是DoublyLinkedList
。 这是我的代码,但它会抛出异常。请帮助我,谢谢。二叉搜索树
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()))
我该如何完成递归调用? – user472221 2010-12-13 15:38:21
我想你需要在第一个if块的末尾有一个“return”。或者,如果结果相同,则可以将递归makeBST调用放入适当的“else if”块中。 – TToni 2010-12-13 15:41:38
@ user472221,TToni和iirekm已经说得对。对于递归结束条件,你需要考虑什么时候递归需要停止(提示:当你有一棵大小为0或者大小为1的树时会发生什么?),并且当这个条件被命中时,你需要确保函数停止调用自己。 – Assaf 2010-12-13 15:52:49