分段错误在C中创建二叉搜索树

时间:2017-07-26 00:20:05

标签: c tree binary-search-tree

我刚刚开始学习C语言中的树,并且我的代码一直出现分段错误。代码用于创建树,然后返回树中的最小值和最大值。我查看了其他人的代码,我似乎无法找到我所犯的错误。如果有人能发现它会非常有帮助。

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

typedef struct node{
    int data;
    struct node* right;
    struct node* left;
}node;

node* Insert(node* root, int data);
int Min(node* root);
int Max(node* root);
node* GetNewNode(int data);

int main(void){
    int min, max, data, x;
    node* root = NULL;
    printf("how many elements would you like to be in the tree\n");
    scanf("%i", &x);
    for(int i = 0; i < x; i++){
        scanf("%i", &data);
        root = Insert(root, data);
    }
    min = Min(root);
    max = Max(root);
    printf("the min value is %i, and the max value is %i\n", min, max);

}

node* Insert(node* root, int data){
    if(root == NULL){
        root = GetNewNode(data);
    }
    else if(data <= root->data){
        root->left = Insert(root->left, data);
    }
    else{
        root->right= Insert(root->right, data);
    }
    return root;
}

node* GetNewNode(int data){
    node* newNode = (node*)malloc(sizeof(node*));
    newNode->data = data;
    newNode->left = newNode->right = NULL;
    return newNode;
}

int Min(node* root){
    node* temp = root;
    if(root->left == NULL){
        return root->data;
    }
    else{
        return Min(root->left);
    }
}

int Max(node* root){
    node* temp = root;
    if(root->right == NULL){
        return root->data;
    }
    else{
        return Max(root->right);
    }
}

2 个答案:

答案 0 :(得分:0)

这一行:

node* newNode = (node*)malloc(sizeof(node*));

您正在分配sizeof(node *)字节,这实际上是系统指针的大小。你想要的是分配足够的内存来保存结构本身而不是指向它的指针。这样的事情会起作用:

node* newNode = (node*)malloc(sizeof(node) * sizeof(char));

答案 1 :(得分:0)

更改此行:

node* newNode = (node*)malloc(sizeof(node*));

到此:

node* newNode = (node*)malloc(sizeof(node));