我得到一個取消引用指針,指向第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 * 卷眼睛
似乎你有'Tnode'而不是'TNode'來聲明'rootNode' –
提示:聲明一個typename等於類定義上的struct標記,並且只在結構本身中使用標記指針。 – Deduplicator