c - 在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,但右侧对我来说是棘手的部分。
如果不允许将开始变量作为参数添加到函数签名中,我无法掌握如何到达数组的右半部分?
我很感激任何建议。
解决方案
要回答您的问题,“开始变量”应该是指向子数组的指针。给定一个数组 a[10],您应该使用大小为 5 的 &a[0] 调用该函数,并再次使用大小为 5 的 &a[5] 调用该函数。
如果我误解了 start 变量的含义,请纠正我。
推荐阅读
- arrays - 对 R 中的多维数组应用函数以查找每个数组中每列的平均值
- node.js - 新的 JSdom API - 错误
- elm - 如何将多个模块导入 Elm REPL?
- mysql - 将 NA 值从 r 加载到 sql
- c++ - 将本地化的卫星 dll 嵌入到 exe 应用程序中
- c - PS/2 键盘不会发送按键中断,但会响应命令
- string - 如何在PowerShell中将字符串转换为整数?
- node.js - 如何从 Firestore 中的查询返回结果?
- javascript - 如何将html代码块直接插入pug
- prolog - SWI-PL:在 writeln() / write() 之后的 read(),nl 保留所有先前 write() 的输出