Ich verstehe, dass Sie rekursiv tun würden, um sich durch eine BST zu bewegen. Bewegen Sie den ganzen Weg nach links, dann zurück und dann nach rechts. Ich versuche, einen Knoten hinzuzufügen, aber die Syntax verwirrte mich, da ich erhalte, dass addTreeNode einen doppelten Zeiger erwartet, aber wenn ich einen doppelten Zeiger in den hinzufüge rekursiver Aufruf es sagt dann "Knoten" ist nicht Teil einer Struktur oder Union. Ich bin nur ein wenig verwirrt, wie man diese Strukturen verwaltet.Ich versuche, rekursiv durch die binäre Suchbaumstruktur zu gehen, um einen Knoten hinzuzufügen
#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);*/
}
Ich habe versucht, Abstraktionen zu suchen, aber ich bin immer noch ein wenig verwirrt auf was abstrahieren den Baum bedeutet .. – Jude
Ein Baum ** IS ** ein Zeiger auf einen root_node, Die gleiche Weise eine verknüpfte Liste ** IS ** ein Zeiger auf das erste Element. [Abstraktion] (https://en.wikipedia.org/wiki/Abstraction_%28computer_science%29#Data_abstraction) versteckt dies vor den Benutzern Ihres Codes und sagt, hier ist ein * Baum *, benutze ihn mit diesen Funktionen. Wie die Knoten implementiert oder verwendet werden, ist nicht Ihre Sache. – xvan