我想在
下生成一个兄弟姐妹树 ABCD
/ | \ \
A B C D
ABCD有四个节点,我为此* next []采用了一个数组。但是这段代码没有成功运行,但会生成序列。我在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)
答案 0 :(得分:2)
首先,“RUN FAILED”来自哪里?这是特定于您的编译器吗?
其次,关于行p=new node[sizeof(str.length())];
,它可能不会给你你想要的东西,因为你正在取无条件整数的sizeof
(这取决于你的平台可能会给出你不管字符串长度是多少。这不是你想要的 - 你想要字符串的实际长度。)
所以 - 既然您已经在使用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;
}
答案 1 :(得分: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;
}
}
请提供更多信息以提供更正确的答案