我试图在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中,如果单词属于父数组,我尝试将单词添加到父节点的向量Array中:

parent->wordList.push_back(word);


当我尝试将列表打印回main时,它没有将单词添加到列表中。当我在insertWord中打印出来时,确实将单词添加到列表中。
我知道这是一个指针问题,但是我看不到我在做什么错。我没有发布我的所有代码,因为有太多代码了。

关于如何成功将我的单词添加到列表中以便在主列表中打印出来的任何想法?

最佳答案

显然,您没有提供足够的信息给我们。您在做什么总体上是正确的,但是细节呢?我认为您将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),...)

关于c++ - 使用结构指针访问函数中的结构,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/26079456/

10-14 19:12
查看更多