2016-04-11 11 views
-1

私はBSTツリーにノードを追加しようとしていますが、再帰を使用してノードを追加する実際の関数はクラッシュしています。私はroot->left =root =に変更しようとしましたが、再帰は6倍になります。 私のサンプル入力は次のとおりです。ところで(彼らは本当の人ではありません)BSTクラッシュプログラムにノードを追加する機能

6 
121 Matt 205000 3000 3 2.0 2000 35 Blueberry Lane 
163 Amy 450000 5000 5 5.5 2016 8885 Winter Garden Drive 
116 Grant 375000 3000 3 2.0 2015 191 Oviedo Lakes 
100 Linda 355000 4000 4 2.5 2014 79 Bradmore Lane 
155 Amy 495000 3500 3 3.0 2012 52 Lenox Drive 
280 Grant 950000 5000 5 6.5 2016 223 Willow Pines 

そして、ここに私のコードです:

#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; 

bNode* addTreeNode(bNode *tree, bNode temp); 
void printTree(bNode *root); 
bNode* getNewNode(bNode *data); 



int main(void) 
{ 
    bNode *root = NULL; 
    int numOfProperties; 
    int i; 
    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); 
    root = addTreeNode(root, temp); 
    } 
    printTree(root); 

    fclose(fp); 

    return 0; 
} 

bNode* getNewNode(bNode* temp){ 
    bNode* newNode = malloc(sizeof(bNode)); 
    newNode = temp; 
    newNode->left = NULL; 
    newNode->right = NULL; 
    return newNode; 

} 

bNode* addTreeNode(bNode *root,bNode temp){ 
    printf("Hey boisadd\n"); 
    if(root==NULL){ 
     printf("Only Once\n"); 
     root = getNewNode(&temp); 
    } 
    else if(temp.listingId < root->listingId){ 
     root = addTreeNode(root->left, temp); 
    } 
    else{ 
     root = addTreeNode(root->right, temp); 
    } 
    return root; 
    /* 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);*/ 
} 

EDIT:たぶんそこgetNodeFunction

bNode* getNewNode(bNode temp){ 
    bNode* newNode = malloc(sizeof(bNode)); 
    strcpy(newNode->address,temp.address); 
    newNode->listingId = temp.listingId; 
    newNode->price = temp.price; 
    newNode->numOfBaths = temp.numOfBaths; 
    newNode->numOfBeds = temp.numOfBeds; 
    newNode->propertySize = temp.propertySize; 
    newNode->yearBuilt = temp.yearBuilt; 
    strcpy(newNode->agent,temp.agent); 


    newNode->left = NULL; 
    newNode->right = NULL; 
    return newNode; 

} 
+0

代わりに何を出力したいのですか? –

+0

@ScottHunter私はツリーにノードを追加しようとしていて、最終的にツリーを印刷しようとしています。 – Jude

+0

@ScottHunter私は実際に問題を修正しましたが、私は自分の体の中に多くのデータフィールドを持っているかのように、それがより良い解決策であるかどうかはわかりません。 – Jude

答えて

0

を変更することで問題を解決します2つの問題があります。まず、このようにする必要があり、機能getNewNode内のノードの割り当て操作、次のとおりです。

bNode* getNewNode(bNode* temp) { 
    bNode* newNode = (bNode*)malloc(sizeof(bNode)); 
    // newNode = temp; 

    newNode->listingId = temp->listingId; 
    newNode->numOfBaths = temp->numOfBaths; 
    newNode->numOfBeds = temp->numOfBeds; 
    strcpy(newNode->agent, temp->agent); 
    strcpy(newNode->address, temp->address); 
    newNode->price = temp->price; 
    newNode->propertySize = temp->propertySize; 
    newNode->yearBuilt = temp->yearBuilt; 

    newNode->left = NULL; 
    newNode->right = NULL; 
    return newNode; 
} 

そして、第二の問題は、あなたがその親に子を追加するとき、あなたは子供への代入ではない、その親である必要があり、子ノードを返すです。

bNode* addTreeNode(bNode *root, bNode temp) { 
    printf("Hey boisadd\n"); 
    if (root == NULL) { 
     printf("Only Once\n"); 
     root = getNewNode(&temp); 
    } 
    else if (temp.listingId < root->listingId) { 
     root->left = addTreeNode(root->left, temp); 
    } 
    else { 
     root->right = addTreeNode(root->right, temp); 
    } 
    return root; 
    /* 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);*/ 
} 
関連する問題