为什么会有这种令人讨厌的二进制搜索树(bst)seg.fault错误?

时间:2018-10-05 00:23:56

标签: search tree insert binary traversal

  
    

输入编号元素,二叉搜索树的元素,要显示的输入elemt whoose子树

  
#include <stdio.h>
  
    

bst的结构节点的定义

  
typedef struct node
{
int info;
struct node *right, *left;
}NODE; 
  
    

在叶子上插入fn,节点

  
struct node* insertBst(struct node* root, int ele)
{

if(root == NULL)
{
    NODE* temp = (NODE*)malloc(sizeof(NODE));
    temp -> info = ele;
    temp -> right = temp -> left = NULL;
    return root;
}

else if(ele > root -> info)
{
    root -> right = insertBst(root -> right, ele);
}

else if(ele < root -> info)
{
    root -> left = insertBst(root -> left, ele);
}


}
  
    

搜索电子元件的地址

  
NODE* search(int ele, NODE* root)
{
if( root == NULL) return NULL;
if(ele > root -> info)
{
    return search(ele, root -> right); 
}

else if( ele < root -> info)
{
    return search(ele, root -> left);
}

else if(ele == root -> info) //ele found
{
    return root;
}

 }
  
    

显示制作的bst     使用预购:ROOT,LEFT,RIGHT

  
void preorder(NODE* root)
{
   if(root)
{
    printf("%d ", root -> info);
    preorder(root -> left);
    preorder(root -> right);
 }
}
  
    我在其中调用

driver来创建我的bst节点的节点,其子树im >>显示

  
int main()
{
int n, ele; //no. of elements in bst
NODE* root = NULL;
printf("no. of bst elements");
scanf("%d", &n);
printf("elements to be inserted in bst");
for(int i = 0; i < n; ++i)
{
    scanf("%d", &ele);
    NODE* t = insertBst(root, ele);
}

printf("element whose subtree needs to be displayed");
scanf("%d", ele); //elements whose subtree is to be diplayed
NODE *temp;
temp = search(ele, root);
preorder(temp);
}

1 个答案:

答案 0 :(得分:0)

segfault可能在该行中:

scanf("%d", ele);

应该在哪里传递ele的地址而不是它的值,就像在for循环内所做的那样。

此外,您的程序将无法运行,因为函数insertBst永远不会分配根节点,因为if(root == NULL)为真(总是)时,您将按需分配节点,但是您将返回相同的root仍然是NULL。您可能打算返回temp

另外,在取消引用之前,最好检查temp指针(在malloc之后)NULL,因为malloc可能失败并返回NULL,并对其取消引用将使您的程序崩溃。