在C中递归拆分数组

时间:2018-12-18 12:35:17

标签: c arrays sorting binary-search-tree

我有一个函数,作为学校作业,可以从排序数组构建排序的二进制搜索树。我不允许编辑功能签名。函数签名应为:

static void buildTreeSortedFromArray(BSTree* tree, const int arr[], int size);

//tree
struct treeNode
{
int data;
struct treeNode* left;
struct treeNode* right;
};

typedef struct treeNode* BSTree;


//this is how far i have got
static void buildTreeSortedFromArray(BSTree* tree, const int arr[], int size)
{
int mid = size / 2;

if (size > size * 2) {
    return NULL;
}


//works for the first time only
if (sizeof(arr) == size) {
    mid = (size - 1) / 2;
}

*tree = createNode(arr[mid]);

BSTree treeTemp = *tree;


    buildTreeSortedFromArray(&(treeTemp)->left, arr,mid-1);


    buildTreeSortedFromArray(&(treeTemp)->right, arr, mid+1);

}

我没有问题递归地构建树的左侧,因为我只需要将数组除以2,直到到达索引0,但是右侧对我来说是棘手的。

如果不允许我将开始变量作为函数签名的参数添加,我无法理解应该如何到达数组的右半部分?

我感谢任何建议。

1 个答案:

答案 0 :(得分:1)

要回答您的问题,“开始变量”应该是指向子数组的指针。给定数组a [10],应再次使用大小为5的&a [0]调用函数,并再次使用大小为5的&a [5]调用函数。

如果我误解了起始变量的含义,请纠正我。

相关问题