Salve, ho scritto questo programma per la gestione di un albero binario ma la ricerca da sempre esito negativo anche quando l'elemento esiste. Posto il codice nella speranza che qualcuno mi aiuti
binarytree.cpp
#include <iostream>
#include <cstddef>
#include "Tree.h"
using namespace std;
int main() {
Tree a;
char c;
while(c!='4'){
cout<<"Inserisci 1 per inserire un valore nell'albero\n 2 per cercarne un valore\n";
cout<<"3 per distruggere un valore e tutti i suoi rami\n 4 per uscire";
cin>>c;
if(c=='1'){
int n;
cout<<"Inserisci il valore numerico da immettere";
cin>>n;
if(a.root==NULL)
a.firstInsert(n);
else
a.insert(n,a.root);
}
if(c=='2'){
int n;
cout<<"Inserisci il valore numerico da cercare";
cin>>n;
a.search(n,a.root,a.found);
if(a.found==NULL)
cout<<"Elemento non trovato";
}
if(c=='3'){
int n;
cout<<"Inserisci il valore numerico da eliminare con tutti i suoi rami";
cin>>n;
a.search(n,a.root,a.found);
if(a.found==NULL)
cout<<"Elemento non trovato";
else
a.destroy_tree(a.found);
}
}
return 0;
}
tree.h
#ifndef TREE_H_
#define TREE_H_
#include <cstddef>
class Tree {
private:
struct node{
node *right;
node *left;
int data;
};
public:
Tree(){
root = NULL;
found = NULL;
}
node *root;
void firstInsert(int);
void destroy_tree(node*);
void insert(int, node*);
void search(int, node*,node*);
node *found;
};
#endif /* TREE_H_ */
tree.cpp
#include "Tree.h"
#include <cstddef>
#include <iostream>
void Tree::destroy_tree(node *leaf){
if(leaf!=NULL){
Tree::destroy_tree(leaf->left);
Tree::destroy_tree(leaf->right);
delete leaf;
}
}
void Tree::insert(int v, node *leaf){
if ( leaf == NULL ) {
node *ptr = new node;
ptr->data = v;
ptr->left = NULL;
ptr->right = NULL;
leaf = ptr;}
else {
if (v == leaf->data)//se l'elemento già esiste nonva inserito niente
;
else{
if ( v < leaf->data ) {
insert ( v, leaf->left );
}
else{
insert ( v, leaf->right );
}
}
}
}
void Tree::firstInsert(int v){
node *ptr = new node;
ptr->data = v;
ptr->left = NULL;
ptr->right = NULL;
root = ptr;}
void Tree::search(int key, node *leaf, node* found){
if(leaf!=NULL){
if(key==leaf->data)
found = leaf;
if(key<leaf->data)
search(key, leaf->left, found);
else
search(key, leaf->right, found);
}
else found = NULL;
}
Grazie anticipatamente per l'attenzione