【发布时间】:2023-03-27 16:41:01
【问题描述】:
我正在尝试以时尚的方式显示此通用树的所有元素 -
NodeData -->(所有子数据的列表)
根据给定的输入,我的输出应该是-
10-->5,6
5-->4,1
6-->
4-->
1-->
我无法弄清楚出了什么问题,我的 o/p 只有 10--> 出于某种原因。 我编写了一个用于打印通用树的递归代码。请帮帮我。。 我的代码是:
using namespace std;
class Node
{
public:
int data;
vector<Node> children;
};
void printTree(Node *node)
{
cout<<node->data<<"-->";
for(auto x:node->children)
cout<<x.data<<",";
cout<<endl;
for(auto x:node->children)
printTree(&x);
}
int main()
{
int a[]={10,5,4,-1,1,-1,-1,6,-1};
int n=sizeof(a)/sizeof(a[0]);
stack<Node> s;
Node root;
for(int i=0;i<n;i++)
{
if(a[i]==-1)
s.pop();
else
{
Node temp;
temp.data=a[i];
if(s.size()==0)
{
root=temp;
}
else
{
s.top().children.push_back(temp);
}
s.push(temp);
}
}
printTree(&root);
return 0;
}````
【问题讨论】:
-
root对象从未在堆栈上s;它的children成员中从未添加任何内容。如果你打印root.children.size(),你会看到它是零。意识到root和temp是两个不同的Node对象;root=temp;不会神奇地将它们粘合在一起,它只是将temp的当前内容复制到root。如您所料,temp的后续更改不会自动反映在root中。 -
当元素
-1从堆栈中遇到你pop但不更新子元素时,它不太清楚预期的输出是什么 -
那么如何将它们粘合在一起?感谢您的帮助。