我正在尝试用C ++创建一个三元树,它会读取一个文件并根据它读取的单词创建树。每个节点都有一个字符,然后是文件中以该字符开头的所有单词的列表,父指针,left1指针,left2指针和右指针。
在我的程序中,我有结构:
struct node_t{
node_t *parent;
node_t *left1;
node_t *left2;
node_t *right;
char letter;
vector<string> wordList;
int lineCount;
};
我有原型插入一个单词
int insertWord(ifstream &dataFile, node_t *parent, char myLetter);
然后在Main我调用一个函数insertWord
if (insertWord(dataFile, &root, ch) == 0{
//if no errors occurred in function do something
}
然后在insertWord中,如果单词属于父数组,我会尝试将单词添加到父节点的向量数组中:
parent->wordList.push_back(word);
当我尝试在main中打印出列表时,它没有将该单词添加到列表中。当我在insertWord中打印出来时,它确实将单词添加到列表中。 我知道这是一个指针问题,但我无法看到我做错了什么。我没有发布我的所有代码,因为它有很多。
有关如何将我的单词成功添加到列表以便在main中打印出来的任何想法吗?
答案 0 :(得分:0)
听起来你可能会在某个地方传递值,并且你希望通过引用或指针传递。我没有在这段代码中看到问题但是进入调试器并确保struct的地址和指针值匹配从main到insertWord
答案 1 :(得分:0)
显然,你没有向我们提供足够的信息。你在做什么总体上是正确的,但细节呢?我认为您将root
定义为node_t
,即:
node_t root;
意味着根是第一个节点。然后,您传递&root
,insertWord
将其作为node_t *parent
接收。但是,insertWord
必须检测并处理空根(如何编码btw)并执行以下操作:
parent = some newly allocated node
但这样做对root
变量没有影响(实际上是按值传递的)。
所以你需要声明:
node_t *root;
并继续通过&root
。在insertWord
中,您收到node_t **pparent
(指向父级的指针),因此您可以修改父级(即根)。在insertWord
中,将所有parent
替换为*pparent
,例如
*pparent = some newly allocated node
我认为insertWord
函数是递归的,你应该有类似的代码:
insertWord(...,parent->left1,...)
成为
insertWord(...,&(*pparent->left1),...)