Что должна сделать программа: учитывая 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;
}