【问题标题】:Building a Binary Search Tree from a sorted array of struct pointers从结构指针的排序数组构建二叉搜索树
【发布时间】: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);
}

【问题讨论】:

  • treearr 的参数是什么?
  • @MikeCAT arr 是包含数据的排序数组
  • 如果您只想从排序的序列中创建一棵树,那么 make_treetree 参数将毫无用处。就此而言,您也不需要左右参数。在构建过程中,您可以只使用数组基数、长度和指针算法来递归当前段的右侧。

标签: arrays c pointers binary-tree binary-search-tree


【解决方案1】:

您在print_inorder() 函数中执行printf("%s\n", node->name);,但name 成员未初始化。正确初始化它(可能在make_tree()函数中)。

另请注意,malloc() 的转换结果被认为是一种不好的做法。

【讨论】:

    猜你喜欢
    • 2016-11-06
    • 2017-12-05
    • 2021-02-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多