输入编号元素,二叉搜索树的元素,要显示的输入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);
}
答案 0 :(得分:0)
segfault可能在该行中:
scanf("%d", ele);
应该在哪里传递ele
的地址而不是它的值,就像在for
循环内所做的那样。
此外,您的程序将无法运行,因为函数insertBst
永远不会分配根节点,因为if(root == NULL)
为真(总是)时,您将按需分配节点,但是您将返回相同的root
仍然是NULL
。您可能打算返回temp
。
另外,在取消引用之前,最好检查temp
指针(在malloc
之后)NULL
,因为malloc可能失败并返回NULL
,并对其取消引用将使您的程序崩溃。