Bir BST'yi hareket ettirmek için bunu yinelemeli olarak yapacağınızı anlıyorum. Tüm yolu sola, sonra geri yoluna devam et, sonra yolun sağa doğru hareket et. Bir düğüm eklemeye çalışıyorum ama sözdizimi, addTreeNode'un bir çift işaretçi beklediğimde kafamı karıştırıyor, ama bende bir çift işaretçi eklediğimde özyinelemeli sonra "düğüm" bir yapı veya birliğin parçası olmadığını söyler. Bu yapıları nasıl yöneteceğim konusunda biraz kafam karıştı. düğüm eklemek için işlev imzası yanaBir düğüm eklemek için ikili arama ağacında yinelemeli olarak hareket etmeye çalışmak
#include <stdio.h>
#include <stdlib.h>
#define ADD_LENGTH 30
typedef struct treeType{
int listingId, price, propertySize;
int numOfBeds, yearBuilt;
double numOfBaths;
char agent[20];
char address[ADD_LENGTH];
struct treeType *left;
struct treeType *right;
}bNode;
typedef struct treeFrame{
bNode *node;
}bTree;
void init(bTree **tree);
void addTreeNode(bTree **tree, bNode *temp);
int main(void)
{
bTree *tree;
int numOfProperties;
int i;
init(&tree);
FILE *fp;
fp = fopen("library.txt","r");
if(fp == NULL){
printf("fopen failed\n");
}
fscanf(fp, "%d", &numOfProperties);
printf("%d\n", numOfProperties);
bNode temp;
// for(i = 0; i < numOfProperties; i++){
fscanf(fp,"%d %s %d %d %d %lf %d %[^\n]s", &temp.listingId, temp.agent,&temp.price,&temp.propertySize,&temp.numOfBeds,
&temp.numOfBaths,&temp.yearBuilt,temp.address);
addTreeNode(&tree, &temp);
//}
fclose(fp);
return 0;
}
void init(bTree **tree){
*tree = malloc(sizeof(bTree));
(*tree)->node= NULL;
}
void addTreeNode(bTree **tree,bNode *temp){
if((*tree)->node == NULL){
(*tree)->node = temp;
(*tree)->node->left = NULL;
(*tree)->node->right = NULL;
}
else if(temp->listingId < (*tree)->node->listingId){
addTreeNode((*tree)->node->left,temp);
}
/* printf("%d %s %d %d %d %.1lf %d %s\n", (*tree)->node->listingId, (*tree)->node->agent, (*tree)->node->propertySize,(*tree)->node->price, (*tree)->node->numOfBeds,
(*tree)->node->numOfBaths, (*tree)->node->yearBuilt, (*tree)->node->address);*/
}
Soyutlamalara bakmaya çalıştım ama hala ağacın soyutlamasının ne olduğu konusunda biraz kafam karıştı .. – Jude
Bir ağaç ** IS ** bir root_node için bir işaretçi, aynı şekilde bir bağlantı listesi ** IS ** ilk öğeye bir işaretçi. [Abstraction] (https://en.wikipedia.org/wiki/Abstraction_%28computer_science%29#Data_abstraction) bunu kodunuzun kullanıcılarından gizliyor ve şöyle diyor, burada bir * ağaç *, bu işlevlerle birlikte kullanın. Uygulanan veya kullanılan düğümler işiniz değil. – xvan