我刚刚开始学习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);
}
}
答案 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));