【发布时间】:2023-03-09 07:25:01
【问题描述】:
我试图从结构指针的排序数组中打印构建 BST。调用 make_tree() 函数后,程序似乎出现分段错误。 我在 make_tree() 中有什么要跳过的吗?任何建议都有帮助。
我的结构
typedef struct student{
char *name; /* student name */
char *number; /* student number */
struct student *left; /* pointer to left subtree */
struct student *right; /* pointer to right subtree */
}Student;
main.c
tree = make_tree (tree, array_of_students, 0, CLASS_SIZE-1);
printf("\nIn Order traversal:\n");
print_inorder(tree);
功能
Student* make_tree(Student *tree, Student *arr[], int left, int right)
{
if (left > right)
return NULL;
int mid = (left + right) / 2;
Student *tree1 = (Student*) malloc(30* sizeof(Student));
tree1->left = make_tree(tree, arr, left, mid - 1);
tree1->right = make_tree(tree, arr, mid + 1, right);
return tree1;
}
void print_inorder(Student *node)
{
if (node == NULL)
{
return;
}
print_inorder(node->left);
print_inorder(node->right);
printf("%s\n", node->name);
}
【问题讨论】:
-
tree和arr的参数是什么? -
@MikeCAT
arr是包含数据的排序数组 -
如果您只想从排序的序列中创建一棵树,那么
make_tree的tree参数将毫无用处。就此而言,您也不需要左右参数。在构建过程中,您可以只使用数组基数、长度和指针算法来递归当前段的右侧。
标签: arrays c pointers binary-tree binary-search-tree