C 我有一个二叉搜索树,我想用inoder(递归函数)将节点复制到一个数组中

C 我有一个二叉搜索树,我想用inoder(递归函数)将节点复制到一个数组中,c,C,嗨,我有一个BST二进制搜索树 typedef struct Treenode *SearchTree; struct Treenode { int Element; SearchTree Left; SearchTree Right; }; 我想创建一个函数 FillArray(int sizeoftree, tree, int array[]) 我想使用数组和 复制阵列中树的节点。 我该怎么做?以下代码不起作用。 我试过: 你的问题是你的函数FillArray只

嗨,我有一个BST二进制搜索树

typedef struct Treenode *SearchTree;
struct  Treenode
{
    int Element;
    SearchTree Left;
    SearchTree Right;
};
我想创建一个函数

FillArray(int sizeoftree, tree, int array[])
我想使用数组和 复制阵列中树的节点。 我该怎么做?以下代码不起作用。 我试过:


你的问题是你的函数
FillArray
只修改了它的参数
a
,这对它的调用者来说是不可见的,因为传入C的参数是按值传递的。您需要某种方法让递归调用告诉
arr
中要添加元素的位置。一种简单的方法是添加一个参数,例如,
index
,它给出了
arr
中要添加元素的第一个索引,并从
FillArray
返回添加的元素数,以便在递归调用
FillArray
后正确更新
index
,并返回添加的元素总数。

FillArray
声明为返回
int
,但是在
else
案例中没有返回值

您可以使用此返回值来表示填充的元素数;这样,您就知道将当前元素按顺序放置在何处

int FillArray(int a, SearchTree T, int arr[]) {
    int count = 0;

    if (T) {
        count += FillArray(a, T->Left, arr);
        arr[a + count++] = T->Element;
        count += FillArray(a + count, T->Right, arr);
    }

    return count;
}

必须通过一个引用

什么“不起作用”呢?我想他希望有人为他写代码,这很可能会发生。但我同意你的观点,需要更多的上下文。C中没有通过引用传递。不过,通过指针传递是可行的。我知道——因为这显然是家庭作业,所以我认为一个线索比一个确切的答案更好。我想这可能是家庭作业——我一开始没想到。哦,好吧……考虑到
+=
s,我怀疑您想要返回的不是
a
。或者您想将
a
设置为返回值,并在null情况下返回
a
?哦,您是对的。使用
a
作为偏移量或使用
a
作为元素数,我显然感到困惑。这是可以解决的。。。
int FillArray(int a, SearchTree T, int arr[]) {
    int count = 0;

    if (T) {
        count += FillArray(a, T->Left, arr);
        arr[a + count++] = T->Element;
        count += FillArray(a + count, T->Right, arr);
    }

    return count;
}