Сохранить узлы из BST в вектор в определенном диапазоне - PullRequest
0 голосов
/ 03 февраля 2019

Что должна сделать программа: учитывая BST / 2 числа k1 и k2 / массив [], я должен вставить все узлы, которые являются k1 <= node_value <= k2, в вектор в порядке возрастания.Пример: Узлы: 1 2 3 4 5 6 K1 = 2 K2 = 6 внутри вектора [] У меня должно быть число 2 3 4 5 6 в этом конкретном порядке, и я должен посчитать эти числа.Моя функция должна возвращать числа (в данном случае: 5, потому что я сохранил 5 чисел внутри вектора), которые сохраняются в векторе. </p>

ФУНКЦИЯ ДОЛЖНА БЫТЬ РЕКУРСИВНОЙ И ДОЛЖНА БЫТЬ ЭФФЕКТИВНОЙ.

Моя проблема: я не знаю, как вставить значения узлов внутри вектора в порядке возрастания.

Если кто-то может мне помочь, это будет невероятно.Заранее спасибо.Я поставлю весь код, так что если кто-то захочет скомпилировать, вы можете сделать это.Первая функция называется RANGE.введите код здесь

#include <stdlib.h>
#include <stdio.h>

typedef struct node{
    int key;
    struct node *p;
    struct node * left;
    struct node * right;
} * Node;

typedef struct tree{
    Node root;
}* Tree;

int range(Node u, int k1, int k2, int v[]){

    int rissx;
    int risdx;
  int i=0;

    if(k1>k2)
        return 0;

    if(u==NULL)
        return 0;
  rissx=range(u->left,k1,k2,&v[i+1]); 
  risdx=range(u->right,k1,k2,&v[i+1]);

    if((k1<=u->key) && (u->key<=k2)){
     v[i]=u->key; 
     return rissx+risdx+1;
  }

  return rissx+risdx;
}

/*create a new tree*/
Tree newtree(){
    Tree new = (Tree) malloc(sizeof(struct tree));
    return new;
}

/*create a new node;*/
Node create_node(int data)
{
    Node new_node = (Node)malloc(sizeof(struct node));
    new_node->key   = data;
    new_node->left  = NULL;
    new_node->right = NULL;
    new_node->p     = NULL;

    return new_node;
}

int treeempty(Tree t){
    Node u=t->root;
    if(u==NULL)
        return 0;
    else
    {
        return 1;
    }
}

void treeinsert(Tree t, Node z){
  Node y=NULL;
  Node x=t->root;

  while(x!=NULL){
    y=x;
    if(z->key<x->key)
      x=x->left;
    else
      x=x->right;

    z->p=y;
    if(y==NULL)
      t->root=z;
    else
    {
      if(y->key>z->key)
        y->left=z;
      else
      {
        y->right=z;
      }
    }
  }
}

Node tree_minimun(Node x){
  while(x->left){
    x = x->left;
  }
  return x;
}

Node tree_maximun(Node x){
  while(x->right){
    x = x->right;
  }
  return x;
}

Node tree_succ(Node x){
  if(x->right){
    return tree_minimun(x->right);
  }
  else{
    Node y;
    y=x->p;
    while(y && y->right==x){
      x=y;
      y=y->p;
    }
    return y;
  }
}
void printInorder(Node n) 
{ 
    if (n == NULL) 
        return; 

    /* first recur on left child */
    printInorder(n->left); 

    /* then print the data of node */
    printf("%d",n->key);

    /* now recur on right child */
    printInorder(n->right); 
} 
Node TreeBuiltAux(int vettore[],int inf,int sup,Node padre){

    int med=(inf+sup)/2;

    Node root;

    if(inf>sup)
      return NULL;

    root=create_node(vettore[med]);
    root->p=padre;
    root->left=TreeBuiltAux(vettore,inf,med-1,root);
    root->right=TreeBuiltAux(vettore,med+1,sup,root);

    return root;
}

Tree TreeBuilt(int vettore[],int dimensione){
  Tree t = newtree();
  t->root=  TreeBuiltAux(vettore,0,dimensione,NULL);
  return t;
}

int main(){
    int vettore[]={1,3,4,5,6,7,9,10};
    int dimension=8;
    int vettore2[9];
    int dimension2= sizeof(vettore2)/sizeof(vettore2[0]);
    int i;

    Tree t=newtree();
      for(i=0;i<dimension2;i++){
      vettore2[i]=0;
    }
    printf("TreeEmpty Function result %d\n",treeempty(t));
    printf("Creating the BST\n");
    t = TreeBuilt(vettore,dimension-1);
    printf("TreeEmpty Function result after the creation of the tree %d\n",treeempty(t));
    printInorder(t->root);
    printf("\n");

    printf("Risult of the function range è : %d ----- k1 : %d and k2 : %d\n",range(t->root,1,5,vettore2),1,5);
    printf("----------------------------------------------------------------\n");
    for(i=0;i<dimension2;i++){
      printf("%d\n",vettore2[i]);
    }
    printf("\n");
    return 0;

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...