我正在尝试使用C语言创建BST树,更具体地说是为我的大学练习。该程序需要从输入文件中读取一些整数,对树进行一些操作,并将新数字写入另一个文件(输出文件)中。
但是,该程序仅读取文件的第五行,然后崩溃,导致退出代码3221226356。我对指针的了解不多,因此希望对发现错误有帮助。
这是代码atm(代码的翻译不正确,只是函数名,但是你们应该把这个想法藏在printf的后面)。
#include<stdio.h>
#include<stdlib.h>
struct node
{
int key;
struct node *left, *right;
};
struct node *newNode(int item)
{
struct node *temp = (struct node *)malloc(sizeof(struct node));
temp->key = item;
temp->left = temp->right = NULL;
return temp;
}
void inorder(struct node *root)
{
if (root != NULL)
{
inorder(root->left);
printf("%d\n", root->key);
inorder(root->right);
}
}
void increaseVector(int *vector_int, int size)
{
int *temp = realloc(vector_int, ((int)(size+1) * sizeof(int)));
if(temp == NULL){
printf("Erro ao increaser o vector.\n");
}
else{
vector_int = temp;
}
}
struct node *insert(struct node* node, int key)
{
if (node == NULL) return newNode(key);
if (key < node->key)
node->left = insert(node->left, key);
else if (key > node->key)
node->right = insert(node->right, key);
return node;
}
struct node *lesserNodeValue(struct node* node)
{
struct node* currently = node;
while (currently->left != NULL)
currently = currently->left;
return currently;
}
struct node *deleteNode(struct node* root, int key)
{
if (root == NULL) return root;
if (key < root->key)
root->left = deleteNode(root->left, key);
else if (key > root->key)
root->right = deleteNode(root->right, key);
else
{
if (root->left == NULL)
{
struct node *temp = root->right;
free(root);
return temp;
}
else if (root->right == NULL)
{
struct node *temp = root->left;
free(root);
return temp;
}
struct node *temp = malloc(sizeof(struct node));
temp = lesserNodeValue(root->right);
root->key = temp->key;
root->right = deleteNode(root->right, temp->key);
}
return root;
}
int middleVector(int *vector, int size){
if(size == 0){
return 0;
}
else if(size%2 == 0){
int middle = (int) size/2;
}
else{
int middle = (int) (size-1)/2;
}
}
void printFile(int *vector_int, int *size)
{
printf("sizeanho do size: %d\n\n",*size);
FILE *entrada;
int tempor = 0;
entrada = fopen("arquivo entrada.txt","r");
if(entrada==NULL){
printf("Erro ao abrir o arquivo");
}
else{
while (fscanf(entrada, "%d", &tempor) != EOF)
{
printf("sizeanho do size: %d\n\n",*size);
increaseVector(vector_int, *size);
printf("size antes de atribuir ao vector: %d\n\n",*size);
vector_int[*size] = tempor;
printf("tempor[%d] = %d\n",*size,tempor);
*size = (int)*size+1;
}
printf("Saiu do WHILE\n\n");
fclose (entrada);
}
}
int main()
{
struct node *root = NULL;
int *vector_int = (int *)malloc(NULL);
int size = 0;
int i;
printFile(vector_int, &size);
printf("sizeanho apos printFile: %d\n\n",size);
int posCentralVector = middleVector(vector_int,size);
printf("middle do vector: %d\n\n", posCentralVector);
root = insert(root, (int)vector_int[posCentralVector]);
for(i=0; i<size; i++)
if(vector_int[i] != root) insert(root, vector_int[i]);
/*root = insert(root, 50);
root = insert(root, 350);
root = deleteNode(root, 10);
root = deleteNode(root, 96);*/
inorder(root);
}
输入文件只是一堆随机的新月形数字。
10 20 27 34 41 44 46 53 60 68 70 73 82 87 96 101 110 113 122 124 127 133141145147147154155157162163