在c#中未处理索引超出范围异常(使用两次遍历创建二叉搜索树)

在c#中未处理索引超出范围异常(使用两次遍历创建二叉搜索树),c#,C#,我找不到这段代码的问题,它说:索引超出了本节中数组的边界: Node node = new Node(postorder[iterator]); 代码如下: public Node reQ_buildTreeUtil(int[] inorder, int[] postorder, int start ,int end, int iterator) { //base case if (start > end) return null; Node

我找不到这段代码的问题,它说:索引超出了本节中数组的边界:

Node node = new Node(postorder[iterator]);
代码如下:

public Node reQ_buildTreeUtil(int[] inorder, int[] postorder, int start ,int end, int iterator)
{
    //base case 
    if (start > end)
        return null;

    Node node = new Node(postorder[iterator]);
    iterator--;

    if (start == end)
        return node;

    int index_in_Inorder = index_search(inorder, start,node.value);

    node.right = reQ_buildTreeUtil(inorder, postorder, index_in_Inorder + 1, end, iterator);
    node.left = reQ_buildTreeUtil(inorder, postorder, start ,index_in_Inorder - 1, iterator);

    return node;
}

public Node buildTree(int[] inorder, int[] postorder)
{
    int n = vinorder.Length;
    int iterator = n - 1;

    return reQ_buildTreeUtil(inorder, postorder, 0, n - 1, iterator);
}

int index_search(int[] array,int start, int x)
{
    int i;
    for ( i = start;i < array.Length; i++)
    {
        if (array[i] == x)
            break;
    }
    return i;
}
public Node reQ\u buildTreeUtil(int[]顺序,int[]后置顺序,int开始,int结束,int迭代器)
{
//基本情况
如果(开始>结束)
返回null;
节点节点=新节点(后序[迭代器]);
迭代器--;
如果(开始==结束)
返回节点;
int index_in_inoorder=索引搜索(inoorder,start,node.value);
node.right=reQ\u buildTreeUtil(按顺序、按顺序、按顺序索引+1、结束、迭代器);
node.left=reQ\u buildTreeUtil(按顺序、按顺序、按顺序开始、按顺序索引-1、迭代器);
返回节点;
}
公共节点构建树(int[]顺序,int[]顺序)
{
int n=顺序长度;
int迭代器=n-1;
返回reQ_buildTreeUtil(按顺序、按顺序、0、n-1、迭代器);
}
int索引_搜索(int[]数组,int开始,int x)
{
int i;
for(i=start;i
问题在于,您试图使用超出范围的索引(迭代器)访问名为postorder的数组。我建议你调试你的代码,让它运行,直到你得到异常,它将打破。然后,您可以使用“调用堆栈”窗口向后跟踪,以查看每个递归调用中的变量值,并尝试了解发生这种情况的原因。

只是一个偶然的机会,但索引可能超出了数组的边界?也许你应该做一些检查以确保不是这样?你的代码不完整。在哪里声明了
niza
n
呢?如果您试图在调试器中运行此操作,您可能已经在崩溃站点观察到了
iterator==-1
。我不明白这段代码要完成什么——您能提供一个预期输入和输出的示例吗?如果没有找到值,您的
index\u search
方法将返回输入数组的大小——这是故意的吗?我有两个文本框,其中输入为:3,5,7,10,13,15,17,20,21,25,28,30,26,40,45(按序遍历)3,7,5,13,17,15,10,21,28,25,36,45,40,20(按序遍历)并基于这些,我需要在第三个文本框中获取20 10 5 3 7 15 13 17 30 25 21 28 40 36 45。我在java中尝试了相同的代码,works perfectlyindex_搜索方法返回索引数组中根的索引,