首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在java中从preOrder和inOrder构建二叉树

在java中从preOrder和inOrder构建二叉树
EN

Stack Overflow用户
提问于 2021-05-10 00:16:46
回答 1查看 31关注 0票数 0

我有一个问题,这段代码,我在许多网站搜索,但我没有得到我想要的答案。我从GeeksforGeeks复制了这段代码,但我不知道问题出在哪里。我在linux等其他平台上测试了这段代码,但它不能在那里工作,我还在eclipse IDE上测试了它,它在那里不能工作,这是我的代码:

代码语言:javascript
复制
class SolveBT<E>  {

Node<E> treeRoot;
int preIndex = 0;

public SolveBT() {
    treeRoot = new Node<>(null);
}
 public void buildTree(E[] preOrder, E[] inOrder) {
     treeRoot = makeTree(preOrder, inOrder, 0, inOrder.length - 1);

}

private Node<E> makeTree(E[] preOrder, E[] inOrder, int start, int end) {
    if (start > end)
        return null;


    Node<E> node = new Node<>(preOrder[preIndex++]);

    if (start == end)
        return node;


    int index = find(inOrder, start, end, node.getData());


    node.setLeft(makeTree(inOrder, preOrder, start, index - 1));
    node.setRight(makeTree(inOrder, preOrder, index + 1, end));

    return node;
}

public int find(E[] arr, int start, int end, E value) {
    int i;
    for (i = start; i <end; i++) {
        if (arr[i] == value)
            return i;
    }
    return i;

}

}

代码语言:javascript
复制
   public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    SolveBT<String> tree = new SolveBT<>();


    String[] preOrder = scanner.nextLine().trim().split(" ");
    String[] inOrder = scanner.nextLine().trim().split(" ");


    tree.buildTree(preOrder, inOrder);


   AND THIS IS INPUT AND EXCEPTION :


   A B D E C F
   D B E A F C
    Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 
    6 out of bounds for length 6
at SolveBT.makeTree(ForStudents.java:290)
at SolveBT.makeTree(ForStudents.java:299)
at SolveBT.makeTree(ForStudents.java:299)
at SolveBT.makeTree(ForStudents.java:299)
at SolveBT.makeTree(ForStudents.java:299)
at SolveBT.makeTree(ForStudents.java:299)
at SolveBT.makeTree(ForStudents.java:299)
at SolveBT.buildTree(ForStudents.java:281)
at ForStudents.main(ForStudents.java:15)
EN

回答 1

Stack Overflow用户

发布于 2021-05-10 00:32:44

错误出在行中

代码语言:javascript
复制
 Node<E> node = new Node<>(preOrder[preIndex++]);

每次调用函数时,preIndexvariable都会递增。检查它的用法和逻辑。根据我的观点,它应该是静态

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67459879

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档