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