2014-04-10 46 views
-1

我得到一個取消引用指針,指向第58行的不完整類型:rootNode - > _ left = NULL。有任何想法嗎?

此外,還有很多代碼註釋掉單個此錯誤,但我有關於此ADT格式的另一個問題: 通常的二叉搜索樹結構中只有一個節點類和所有BST函數如插入和返回節點。然而,在這裏我必須使用一個單獨的Tree結構,它具有另一個結構TNode的根。這對我來說是有問題的,例如在它只返回並且接受Tree參數的addStringToTree函數中。所以我不知道如何用通常的方法緩解這個問題。我創建了一個輔助函數作爲我的解決方案,但不確定這是否理想。C - 取消引用指向不完整類型的指針 - 將字符串插入二叉搜索樹

#include <stdio.h> 
#include <stdlib.h> 
#include <ctype.h> 
#include <string.h> 
#include <stdbool.h> 

typedef struct TNode { 
struct TNode* _left; 
struct TNode* _right; 
struct TNode* _key; 
} TNode; 

typedef struct Tree { 
TNode* _root; 
} Tree; 

Tree* makeEmptyTree(); 
void destroyTree(Tree* root); 
Tree* addStringToTree(Tree* t, char* value); 
TNode* addStringToTreeHelper(TNode* node, char* value); 
bool lookupInTree(Tree* t, char* value); 
void traverse(TNode* root); 

struct Tree* wordTree; 
struct TNode* wordRoot; 


int main() { 

if(wordTree = makeEmptyTree()) { 
    printf("Tree initialized.\n"); 

///  traverse(wordTree->_root); 
    addStringToTree(wordTree, "peter"); 

    //printf(wordTree->_root->_key); 
    //traverse(wordTree->_root); 

} else { 
    printf("Error initializing tree.\n"); 
} 

return 0; 
} 

Tree* makeEmptyTree() { 
struct Tree* theTree = malloc(sizeof(struct Tree*)); // allocate memory for Tree 
theTree->_root = NULL; 
return theTree; 
} 


Tree* addStringToTree(Tree* t, char* value) { 

if(t->_root == NULL) { 
    struct Tnode* rootNode = malloc(sizeof(struct TNode*)); 
    rootNode->_left = NULL; 
    //rootNode = (TNode*)malloc(sizeof(struct TNode)); 
    //strcpy(rootNode->_key, value); 
    // rootNode->_left = NULL; 
    // rootNode->_right = NULL; 
    //printf(rootNode->_key); 
} else { 
    //addStringToTreeHelper(root, value); 
} 

return t; 
} 

TNode* addStringToTreeHelper(TNode* node, char* value) { 
// node = malloc(sizeof(TNode)); // What is going on 

if(strcmp(value, node->_key) < 0) { 
    node->_left = addStringToTreeHelper(node->_left, value); 
} else if(strcmp(value, node->_key) > 0) { 
    node->_right = addStringToTreeHelper(node->_right, value); 
} 
return node; 
} 

void traverse(TNode* root) { 
// if(root != NULL) { 
// traverse(root->_left); 
// printf("%s\n", root->_key); 
// traverse(root->_right); 
// } else { 
// printf("Empty Tree\n"); 
// } 
} 

第二編輯

哇只是一個愚蠢的錯字。多謝你們。此外TNODE的_key變量應該是char *相關而不是結構TNODE * 卷眼睛

+0

似乎你有'Tnode'而不是'TNode'來聲明'rootNode' –

+1

提示:聲明一個typename等於類定義上的struct標記,並且只在結構本身中使用標記指針。 – Deduplicator

回答

1

struct Tnode* rootNode = malloc(sizeof(struct TNode*));

應該

struct Tnode* rootNode = malloc(sizeof(struct TNode));

你只是一個分配足夠的內存指針,然後指向它。

編輯:

這應該是TNode* rootNodeTnode* rootNode

+1

甚至更​​好'struct Tnode * rootNode = malloc(sizeof * rootNode);'。使錯誤的可能性降低。 – Deduplicator

相關問題