嗨 我有其中有幾個電話號碼,它像{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