首页 > 解决方案 > 在c中递归拆分数组

问题描述

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

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,但右侧对我来说是棘手的部分。

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

我很感激任何建议。

标签: carrayssortingbinary-search-tree

解决方案


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

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


推荐阅读