如何解决显示通用树的元素
我试图以这种方式显示此通用树的所有元素-
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,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
的含义。要修复根,使其可以引用顶部树的顶部,请将根设置为指针类型(Node *
)。然后,当您设置root = &temp
时,根将指向树的顶部,而不仅仅是顶部节点的副本。
您的代码将root
声明为未实例化的对象。这样,root = temp
在执行时将temp
的浅表副本触发到root
中。复制完成后,对temp
的更改不会反映在root
中,因为它们是截然不同的对象。尽管应注意,如果对象具有指针类型属性,则将复制指针,因此两个对象将具有指向相同内存空间的单独指针。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。