我有一个函数,作为学校作业,可以从排序数组构建排序的二进制搜索树。我不允许编辑功能签名。函数签名应为:
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,但是右侧对我来说是棘手的。
如果不允许我将开始变量作为函数签名的参数添加,我无法理解应该如何到达数组的右半部分?
我感谢任何建议。
答案 0 :(得分:1)
要回答您的问题,“开始变量”应该是指向子数组的指针。给定数组a [10],应再次使用大小为5的&a [0]调用函数,并再次使用大小为5的&a [5]调用函数。
如果我误解了起始变量的含义,请纠正我。