에 관계없이 항목에 존재하는 동일한를 반환 여기 내 코드입니다 :검색 기능은 이진 검색 트리
#include<iostream.h>
#include<conio.h>
#include<stdlib.h>
#include<process.h>
struct tree_node
{
tree_node *left;
tree_node *right;
int data;
char r;
} ;
class bst
{
tree_node *root;
public:
bst()
{
root=NULL;
}
int isempty()
{
return(root==NULL);
}
void insert(int item);
void inordertrav();
void inorder(tree_node *);
void postordertrav();
void postorder(tree_node *);
void preordertrav();
void preorder(tree_node *);
int search(tree_node * ,int);
};
void bst::insert(int item)
{
tree_node *p=new tree_node;
tree_node *previous;
p->data=item;
p->left=NULL;
p->right=NULL;
previous=NULL;
if(isempty())
root=p;
else
{
tree_node *current;
current=root;
while(current!=NULL)
{
previous=current;
if(item<current->data)
current=current->left;
else
current=current->right;
}
if(item<previous->data)
previous->left=p;
else
previous->right=p;
}
}
int bst::search(tree_node* root,int data) {
int r;
if(root == NULL) {
// r='f';
return 0;
}
else if (root != NULL){
if(root->data == data) {
// r='t';
return 1;
}
}
else if(data <= root->data) {
return search(root->left,data);
}
else {
return search(root->right,data);
}
}
void main()
{
int digit;
bst b;
tree_node *root;
/*b.insert(52);
b.insert(25);
b.insert(50);
b.insert(15);
b.insert(40);
b.insert(45);
b.insert(20); */
cout<<"insert the nodes in the BT";
cout<<"enter integer: to quit enter 0";
cin>>digit;
while (digit!=0)
{
b.insert(digit);
cin>>digit;
}
cout<<"inorder"<<endl;
b.inordertrav();
cout<<endl<<"postorder"<<endl;
b.postordertrav();
cout<<endl<<"preorder"<<endl;
b.preordertrav();
int number;
cout<<"Enter number be searched\n";
cin>>number;
//If number is found, print "FOUND"
int c;
c=b.search(root,number);
cout<<"returned value"<<c;
if (c==1) cout<<"Found\n";
else cout<<"Not Found\n";
getch();
}
검색 기능이 항상이 BST에 있는지 여부와 상관없이 같은 값을 반환은. 오류를 알아내는 데 도움주세요. 위의 코드에는 컴파일 오류가 없습니다. 검색 기능을 제외한 다른 모든 기능이 정상적으로 작동합니다. 그러나 요소가 이진 검색 트리에 있는지 여부를 검색하는 데 필요한 검색 기능이 작동하지 않습니다.
안녕하세요, 코드를 수정하고 형식을 지정하십시오. 그것이 그렇듯이, 읽고 이해하기가 어렵습니다. – utnapistim
'search'의 처음 두 조건을 살펴보고 두 조건이 모두 거짓 인 경우를 찾으십시오. 브래킷 배치 문제가 있다고 생각합니다. – molbdnilo
이 프로그램과 같은 작은 프로그램을 디버깅하는 방법에 대해서는 [Eric Lippert의 훌륭한 블로그 게시물] (http://ericlippert.com/2014/03/05/how-to-debug-small-programs/)을 읽어야합니다. 기술은 설명했다. –