안녕 내가 {23,16,45,26,2,5,9}
처럼 몇 가지 숫자를 가지고 배열 목록을 가지고 있고이이 배열리스트와 이진 검색 트리를 만들고 싶어 "array"
과 그 요소가 객체 2
필드, 1)digit2)level
하지만, 여기 단지 그 digit
필드를 사용하고 싶습니다. 또한 dList
은 DoublyLinkedList
입니다. 이것은 내 코드이지만 exception.please가 도움이됩니다.이진 검색 트리
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
첫 번째 if 블록의 끝에 "return"이 필요하다고 생각합니다. 또는 동일한 결과로 재귀 makeBST 호출을 적절한 "else if"블록에 넣을 수 있습니다. – TToni
@ user472221, TToni와 iirekm는 올바르게했습니다. 재귀 적 종료 조건의 경우 재귀를 중지해야하는 시점을 생각해야합니다 (힌트 : 크기가 0이거나 크기가 1 인 트리가있는 경우 어떻게됩니까?). 그리고 그 조건에 도달하면 함수를 확인해야합니다 자체 호출을 중지합니다. – Assaf