c - 错误: Segmentation Fault(core dumped) || Inserting Element into a BST || C

标签 c binary-search-tree

我正在尝试从给定的数组创建 BST,然后按顺序遍历它。没有编译错误,但在运行时错误是段错误(核心转储)。我一直无法找出错误的原因(尝试浏览 stackoverflow 查找类似情况)。代码如下:

    #include<stdio.h>
    #include<stdlib.h>

    struct TreeNode{
     int data;
     struct TreeNode *right;
     struct TreeNode *left;
    };
    struct TreeNode *newTreeNode(){
     struct TreeNode *node = malloc(sizeof(struct TreeNode));
     if(node){
       node->data = 0;
       node->left = NULL;
       node->right = NULL;
       return node;
     }
     else{
      printf("Memory Error");
     }
    };
    void InorderTraversalRecursive(struct TreeNode *node){
     InorderTraversalRecursive(node->left);
     printf("%d",node->data);
     InorderTraversalRecursive(node->right);
    }

    struct TreeNode *InsertIntoTree(struct TreeNode *node, int data){
     if(node == NULL){
     node = newTreeNode();
     node->data = data;
     node->left = node->right = NULL;
     }
     else{
      if(data > node->data)
        InsertIntoTree(node->right, data);
     else if(data < node->data)
        InsertIntoTree(node->left, data);
     }
    return node;
    }

    struct TreeNode *MakeTreeFromData(int *arr){
     int size = sizeof(arr)/sizeof(arr[0]);
     struct TreeNode *root;
     root = newTreeNode();

     int i;
     for(i=0;i<size;i++){
      InsertIntoTree(root,arr[i]);
     }
     return root;
    }

    void main(){
     int data[] = {4,2,6,1,7,3,5,8};
     struct TreeNode *root;
     root = MakeTreeFromData(data);
     InorderTraversalRecursive(root);
    }

最佳答案

这一行有一个明显的错误

int size = sizeof(arr)/sizeof(arr[0]);

其中arr不是数组而是指针。这根本不符合您的想法。您必须将数组的大小作为参数传递给函数。

关于c - 错误: Segmentation Fault(core dumped) || Inserting Element into a BST || C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31907435/

相关文章:

c - 带空格分隔符的 strtok() 函数

java - Java 中 BST 的节点

c - 二叉搜索树无法删除根

python - 更新二叉搜索树中的数据

C - 如何通过 ctime 函数实际使用 long long 数据类型

c - 枚举类型的表示和对齐要求

algorithm - 尝试检查树是否为二叉搜索树

java - 为什么我的打印方法无法按顺序打印出二叉搜索树?

c - 从字符串中提取某些十六进制值到新字符串

c - sscanf 坏了吗?