我正在尝试从给定的数组创建 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/