2

我想生成一棵兄弟姐妹树,如下所示

                                   ABCD
                                 /  | \ \
                                A   B  C D

ABCD 有四个节点,我为此 *n​​ext[] 取了一个数组。但是这段代码没有成功运行,但它产生了序列。我在 main() 中编写了为 enque 函数提供字符的代码。例如 str.at(x) 其中 x 是 for 循环中的变量。

     struct node
    {
        string info;
        struct node *next[];
    }*root,*child;

    string str, goal;
    int dept=0,bnod=0,cl,z=0;
    void enqueue(string n);

    void enqueue(string n)
    {

        node *p, *temp;
        p=new node[sizeof(str.length())];
        p->info=n;
        for (int x=0;x<str.length();x++)
        p->next[x]=NULL;
        if(root==NULL)
        {
            root=p;
            child=p;
        }
        else
        {   
            cout<<" cl="<<cl<<endl;
            if(cl<str.length())
            {
                child->next[cl]=p;
            temp=child->next[cl];

            cout<<"chile-info "<<temp->info<<endl;
            }   
            else
                cout<<" clif="<<cl<<endl;
}
}

输出

Enter String: sham
cl=0
chile-info s
cl=1
chile-info h
cl=2
chile-info a
cl=3
chile-info m

RUN FAILED (exit value 1, total time: 2s)
4

2 回答 2

2

首先,“RUN FAILED”从何而来?这是特定于您的编译器的吗?

其次,关于 line p=new node[sizeof(str.length())];,它可能不会给你你想要的,因为你正在使用sizeof一个无符号整数(取决于你的平台,无论字符串长度如何,它都可能给你 4 。这不是你想要的'在之后 - 你想要字符串的实际长度)。

所以 - 既然你已经在使用std::string,为什么不使用std::vector呢?您的代码看起来会更友好:-)

如果我将前几行作为您想要的输出(抱歉,您发布的代码很难破译,而且我认为它也无法编译,所以我忽略它;-))

像这样的东西会更适合你吗?

#include <iostream>
#include <vector>
#include <string>

typedef struct node
{
  std::string info;
  std::vector<struct node*> children;
}Node;

Node * enqueue(std::string str)
{
  Node * root;
  root = new Node();

  root->info = str;

  for (int x = 0; x < str.length(); x++)
  {
    Node * temp = new Node();
    temp->info = str[x];
    root->children.push_back(temp);
  }

  return root;
}

int main()
{
  Node * myRoot = enqueue("ABCD");

  std::cout << myRoot->info << "\n";

  for( int i = 0; i < myRoot->children.size(); i++)
  {
    std::cout << myRoot->children[i]->info << ", ";
  }

  char c;
  std::cin >> c;
  return 0;
}
于 2013-11-10T17:23:33.837 回答
1

您的代码似乎不完整。至少线

p=new node[sizeof(str.length())];

似乎错了。我猜 enqueue 应该类似于以下内容:

 struct node
    {
        string info;
        struct node *next; // [] - is not necessary here
    }*root,*child;

    string str, goal;
    int dept=0,bnod=0,cl,z=0;
void enqueue(string n)
{

node *p, *temp;
p = new node;
p->next = new node[str.length()];
p->info=n;
for (int x=0;x<str.length();x++)
{
    p->next[x] = new node;
    p->next[x]->next = 0;
    p->next[x]->info = str[x];
}

if(root==NULL)
{
    root=p;
    child=p;
}
}

请提供更多信息以给出更正确的答案

于 2013-11-10T16:27:43.240 回答