gpt4 book ai didi

C编程: I have an error in creating a binary search tree using C

转载 作者:行者123 更新时间:2023-11-30 21:23:11 24 4
gpt4 key购买 nike

我需要为 BST 创建一个 C 程序,但无法为根节点创建左子节点或右子节点。创建根节点就ok了。我还可以搜索根节点中的元素。但无法在树中添加多个元素请帮我解决这个问题,请解释我所犯的错误

#include<stdio.h>
#include<stdlib.h>
typedef struct tree
{
struct tree *left;
int data;
struct tree *right;
}node;
node *ROOT;
//////////////////////////
void *bud()
{
return (node *)malloc(sizeof(node));
}
/////////////////////
void createNode(int data, node *ptr)
{
if(ptr==NULL)
{
ptr=bud();
ptr->data=data;
ptr->left=NULL;
ptr->right=NULL;
ROOT=ptr;
ptr=NULL;
printf("DONE");
return;
}
else if(data==ptr->data)
{
printf("Duplication not possible");
return;
}
else if (data<ptr->data)
{
//ptr=ptr->left;
createNode(data,ptr->left);
}
else if (data>ptr->data)
{
//ptr=ptr->right;
createNode(data,ptr->right);
}
else
{
printf("INVALID");
}
}
//////////////////////////////////////
void search(int data,node *ptr)
{
if(ptr==NULL)
{
printf("NOT FOUND");
return;
}
else if (ptr->data==data)
{
printf("Item Found");
return;
}
else if(data<ptr->data)
{
//ptr=ptr->left;
search(data,ptr->left);
}
else if (data>ptr->data)
{
//ptr=ptr->right;
search(data,ptr->right);
}
else
{
printf("INVALID");
}
}
/////////////////////////////////
void main()
{
int ch;
ch=0;
while (ch!=6)
{
printf("\nMENU\n1. Create Tree\n2. Search\n3. Inorder\n4.
Preorder\n5. Postorder\n6. Exit\n EnterYour Choice: ");
scanf("%d",&ch);
if(ch==1)
{
int dat;
printf("\nEnter the number to be inserted: ");
scanf("%d",&dat);
createNode(dat,ROOT);
}
else if(ch==2)
{
int dat;
printf("Enter number to be searched: ");
scanf("%d",&dat);
search(dat,ROOT);
}
else if(ch==6)
{
return;
}
else
{
printf("\nEnter a valid choice\n");
}
}
}

问题是逻辑错误。我无法创建树的左子节点或右子节点。我插入到树中的任何内容都会插入到根节点。

最佳答案

I can't create the left or right child of the tree. Whatever I insert to the tree gets inserted to the root node.

发生这种情况是因为 createNode() 中的这条语句:

ROOT=ptr;

每当您在树中插入一个元素时,您都会递归地遍历树,当您找到要插入的适当位置时,您会将其传递给 createNode() ,即 NULL (ptr->left 或 ptr->right)和 ROOT 被重新分配给 ptr

如果我只是对您的程序进行更改以使其正常工作,createNode() 将如下所示:

void createNode(int data, node **ptr)
{
if(*ptr==NULL)
{
*ptr=bud();
(*ptr)->data=data;
(*ptr)->left=NULL;
(*ptr)->right=NULL;
printf("DONE");
return;
}
else if(data==(*ptr)->data)
{
printf("Duplication not possible");
return;
}
else if (data<(*ptr)->data)
{
createNode(data,&((*ptr)->left));
}
else if (data>(*ptr)->data)
{
createNode(data,&((*ptr)->right));
}
else
{
printf("INVALID");
}
}

main()中,您需要执行以下操作:

createNode(dat,&ROOT);

但是,您的程序还有一定的改进空间,例如将程序中的节点创建插入 操作分开。我将让您自行寻找改进和更好的实现方式。

关于C编程: I have an error in creating a binary search tree using C,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47141563/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com