【问题标题】:Recursively splitting array in c [duplicate]在c中递归拆分数组[重复]
【发布时间】:2018-12-18 12:35:17
【问题描述】:

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

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

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

感谢任何建议。

【问题讨论】:

  • 你好,Sejaad。观察我如何编辑你的问题,格式化你的代码。下次如果你自己做就好了。 :) 在 Stackoverflow 中获得帮助的建议是创建一个 MCVE
  • 如果你有arr和size = 10,那么在你的两个递归调用中你分别传递arr和size = 5 arr+5和size = 5 .
  • 您应该发布到目前为止您对左侧所做的工作,该方法将与数组的其余部分类似。
  • 没有什么能阻止你让你的函数调用另一个有 start 变量的函数吗?
  • 如果不知道BSTree 是什么,这是无法回答的。有些实现只是使用NULL作为根,然后这个原型根本就存在缺陷,无法解决问题。请显示BSTree 的类型定义以及如何从 main() 调用此函数。

标签: c arrays sorting binary-search-tree


【解决方案1】:

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

如果我误解了你所说的开始变量的意思,请纠正我。

【讨论】:

  • 不,您理解正确,谢谢。我仍然是初学者,但我会尝试实施您的建议
猜你喜欢
  • 1970-01-01
  • 2015-01-09
  • 2018-10-03
  • 2016-02-18
  • 2018-05-07
  • 1970-01-01
  • 2012-01-16
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多