Voglio memorizzare il puntatore a Tree in modo da,arrivando alla fine del ramo corretto, poter memorizzare nell' albero passato come parametro il nuovo nodo con parte elemento=x.
x YuYevon:chiedo venia è la prima volta che provo la strada del forum e non sono pratico cerco di essere più chiaro.
codice:
typedef struct Node* Tree;
typedef struct Node {
int element;
Tree left; // sinistro
Tree right; // destro
}Node;
Tree newNode(int el) {
Tree pnode = (Node *)malloc(sizeof(Node));
pnode->element = el;
pnode->left = NULL;
pnode->right = NULL;
return pnode;
}
int find(int x, Tree t) {
int el; // usando una variabile in più si evita ogni
if(t) { // volta il doppio calcolo della chiave del nodo
el = t->element;
if(x < el) return find(x,t->left);
else if(x > el) return find(x,t->right);
else return 1;
}
else return 0;
}
//----------------------METODI X STACK
#define SIZE 50
Tree *tos, *p1, stack[SIZE];
void push(Tree* i)
{
p1++;
if(p1 == (tos+SIZE)) {
printf("Stack Overflow.\n");
exit(1);
}
p1 = i;
}
Tree* pop(void)
{
if(p1 == tos) {
printf("Stack Underflow.\n");
exit(1);
}
p1--;
return (p1+1);
}
//---------------------------------------------------------------------
void addIt(int x, Tree * T){
tos = stack;
p1 = stack;
if (findIt(x,*T)==1) return;
printf("L'elemento non è stato trovato.Procedo all'inserimento.\n");
int flag=0; //settato a 1 quando trovo posizione corretta
push(T);
Node *node;
//Tree cursor=T;
do{
&node=pop(); error: lvalue required as left operand of assignment
if (node->element >x){
printf("node->element >x");
if (node->left!=NULL) push(&(node)->left);
else flag=1;
}else{
printf("node->element <x");
if (node->right!=NULL) push(&(node)->right);
else flag=1;
}
}while (flag==0);
if (node->element > x) node->left=newNode(x);
else node->right=newNode(x);
}
int main() {
Tree t=newTree();
addIt(5,&t);
}