C Percorsi sugli ABR

di il
3 risposte

C Percorsi sugli ABR

Ciao a tutti...ho un problema con un esercizio.
Devo scrivere un codice che prende in input due numeri N e K.
ho due ABR ciascuno di N elementi e in cui è presente K.
il programma deve stampare 1 se il percorso che dalla radice porta a K è lo stesso nei due alberi, 0 se è diverso.
Avevo pensato a una cosa del genere, però mi restituisce sempre zero come output....qualcuno può darmi una mano?? grazie
#include<stdio.h>
#include<stdlib.h>

typedef struct _node{

  int key;

  struct _node *left;

  struct _node *right;

} node;

node* insertRec(node *tree, int input){

  if(tree==NULL){

    node *new=(node*) malloc(sizeof(node));

    new->key=input;

    new->left=NULL;

    new->right=NULL;

    return new;

  }

  if(tree->key > input) tree->left=insertRec(tree->left, input);

  else tree->right=insertRec(tree->right, input);

  return tree;

}

int compare(node *tree1, node *tree2, int k){

  if(tree1==NULL) return 0;

  if(tree2==NULL) return 0;

  if(tree1->key != tree2->key) return 0;

  else{

    if(tree1->key==k) return 1;

    else{

      if(tree1->key > k) compare(tree1->left, tree2->left, k);

      else compare(tree1->right, tree2->right, k);

    }

  }

}

main(){

  int n, k, i, j, input;

  node *treeA, *treeB;

  scanf("%d %d", &n, &k);

  for(i=0; i<n; i++){

    scanf("%d", &input);

    treeA=insertRec(treeA, input);

  }

  for(j=0; j<n; j++){

    scanf("%d", &input);

    treeB=insertRec(treeB, input);

  }

 int cmp=compare(treeA, treeB, k);

 printf("%d\n", cmp);

 return 0;

}

3 Risposte

Devi accedere o registrarti per scrivere nel forum
3 risposte