【问题标题】:Displaying elements of a Generic Tree显示通用树的元素
【发布时间】: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(),你会看到它是零。意识到roottemp 是两个不同的Node 对象; root=temp; 不会神奇地将它们粘合在一起,它只是将temp 的当前内容复制到root。如您所料,temp 的后续更改不会自动反映在 root 中。
  • 当元素-1从堆栈中遇到你pop但不更新子元素时,它不太清楚预期的输出是什么
  • 那么如何将它们粘合在一起?感谢您的帮助。

标签: c++ recursion tree


【解决方案1】:

要打印你的树,你需要有一个指向树顶部的指针,这就是root 的意思。要修复 root 以便它可以引用顶层树的顶部,请将 root 设置为指针类型 (Node *)。然后,当您设置root = &amp;temp 时,root 将指向树的顶部,而不仅仅是顶部节点的副本。

您的代码将root 声明为未实例化的对象。因此,root = temp 在执行时触发temproot 的浅拷贝。复制完成后,对temp 的更改不会反映在root 中,因为它们是明显独立的对象。尽管应该注意,如果对象具有指针类型属性,则指针将被复制,因此两个对象将具有指向同一内存空间的单独指针。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-16
    • 2015-04-17
    • 2019-05-28
    • 1970-01-01
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多