老嘟 2023-07-14 20:22 采纳率: 0%
浏览 3

#树的表示方法#火速支援

树的表示方法有多种,如图6_1采用的就是一种形象的树形表示法;另外还有一种常用的表示方法"括号表示法",它的表示方法归纳如下:先将整棵树的根结点放入一对圆括号中,然后把它的子树由左至右放入括号中,同层子树用圆括号括在一起(同层子树之间用逗号隔开),而对子树也采用同样的方法处理,直到所有的子树都只有一个根结点为止。用括号表示法表示图6_1的步骤如下:


=(T)
  =(1T1T2T3 )) {1是根结点,有3棵子树,用逗号隔开}
  =(12T11T12),34T31))) {分别对3棵子树做同样的操作}
  =(1256),347T311T312))))
  =(1256),34789))))

实际上,以上方法是按照树的层次逐步展开,直到所有结点都已列出。
注意,当一个节点有若干个子树时,子节点编号小的写在前面,编号大的写在后面。
给你一棵n个节点的有根树,节点标号为1~n,1号节点为根节点。
请给出它的括号表示结果。

输入  复制
3
2 2 3
0
0
输出  复制
(1(2,3))

改一下


#include<bits/stdc++.h>
using namespace std;
struct c{
    int data;
    c* next;
};
struct p{
int data;
c* child;
};
struct tree{
    p a[100];
    int n;
};
tree t; 
int main()
{
    cin>>t.n;
    for(int i=1;i<=t.n;i++)
    {
        cin>>t.a[i].data;
        t.a[i].child=NULL;
        int cn;
        cin>>cn;
        if(cn!=0)
            {
            t.a[i].child=new c;
            cin>>t.a[i].child->data;
            t.a[i].child->next=NULL;
            c*p=t.a[i].child;
        while(cn){
            c*s=new c;
            cin>>s->data;
            s->next=NULL;
            p->next=s;
            p=p->next;
            cn--;
            }
        }
    }
    cout<<"1"<<endl;
    for(int i=1;i<=t.n;i++){
        c*k=t.a[i].child;
        while(k)
        {
            cout<<t.a[i].data<<"."<<t.a[k->data].data<<endl; 
            k=k->next;
        }
    }
    return 0;
}

  • 写回答

1条回答 默认 最新

  • CSDN-Ada助手 CSDN-AI 官方账号 2023-07-14 22:23
    关注
    评论

报告相同问题?

问题事件

  • 创建了问题 7月14日

悬赏问题

  • ¥15 python怎么在已有视频文件后添加新帧
  • ¥20 虚幻UE引擎如何让多个同一个蓝图的NPC执行一样的动画,
  • ¥15 fluent里模拟降膜反应的UDF编写
  • ¥15 MYSQL 多表拼接link
  • ¥15 关于某款2.13寸墨水屏的问题
  • ¥15 obsidian的中文层级自动编号
  • ¥15 同一个网口一个电脑连接有网,另一个电脑连接没网
  • ¥15 神经网络模型一直不能上GPU
  • ¥15 pyqt怎么把滑块和输入框相互绑定,求解决!
  • ¥20 wpf datagrid单元闪烁效果失灵