gpt4 book ai didi

c - 搜索功能不返回值

转载 作者:行者123 更新时间:2023-11-30 15:06:19 27 4
gpt4 key购买 nike

我刚刚开始学习树并使用c语言实现它。我想我为树(二叉搜索树)编写了程序,但是在搜索值并打印是否找到元素时,搜索函数未正确返回值(或错误值)我附上代码

// to search in binary search tree
#include<stdio.h>
#include<conio.h>
#include<stdlib.h>

struct bstnode
{
int data;
struct bstnode *left;
struct bstnode *right;
};

struct bstnode *insert(struct bstnode *,int);
int search(struct bstnode *,int);

void main()
{
int n,s,n1;
char ch;
struct node *root;
clrscr();
root=NULL;
do
{
printf("\nEnter a number\n");
scanf("%d",&n);
root=insert(root,n);
printf("\nDo You Wish to enter more\n");
ch=getch();
} while(ch=='Y'||ch=='y');

printf("Enter a number to search");
scanf("%d",&n1);
s=search(root,n1);
if(s==1)
printf("Found");
else
printf("Not found");
getch();
}

struct bstnode* insert(struct bstnode *root,int data)
{
struct bstnode *newnode=(struct bstnode*)malloc(sizeof(struct bstnode));
newnode->data=data;
newnode->left=NULL;
newnode->right=NULL;
if(root==NULL)
{
root=newnode;
}
else if(data<=root->data)
{
root->left=insert(root->left,data);
}
else
{
root->right=insert(root->right,data);
}
return(root);
}

int search(struct bstnode* root,int data)
{
if(root==NULL)
return 0;
if(root->data==NULL)
return 1;
else if(data<=root->data)
return(root->left,data);
else
return(root->right,data);
}

请帮忙!!!

最佳答案

您的搜索函数有两个问题:

  1. 它从不检查是否找到数据。相反,它会检查 root->data == NULL,但这是不正确的。
  2. 它应该在左子树或右子树上递归地调用自身,但事实并非如此。

正确的代码是:

int search(struct bstnode* root,int data)
{
if(root==NULL) {
return 0;
} else if(root->data==data) {
return 1;
} else if(data<=root->data) {
return search(root->left,data);
} else {
return search(root->right,data);
}
}

关于c - 搜索功能不返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39182442/

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