你好
我有一个数组列表,其中有一些数字,例如{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)”需要某种结束条件(一种阻止其调用自身的流路径);实际上,它会不断递归调用自身,这就是导致您的堆栈溢出错误的原因。

08-07 03:42