当前位置: 代码迷 >> 综合 >> 1064. 树的层号表示法(模板题)
  详细解决方案

1064. 树的层号表示法(模板题)

热度:93   发布时间:2023-12-06 11:24:38.0

题目:
在这里插入图片描述
样例:
input:
5
(0,A) (1,B) (2,D) (2,E) (1,C)
output:
DEBCA
思路:
第一次写链表表示的树的题,感觉不太熟悉,参考了代码
对结构体套结构体也稍微有了点了解
最后又自己重新写了一遍,需要注意每次都需要把后面的一个换行符用getchar读掉

代码:

#include <cstdio>
#include <iostream>
#include <cstring>
#include <algorithm>
#include <vector>
using namespace std;
const int maxn=111;
int n;
struct Node
{
    int level;char data;
}a[maxn];
struct treenode
{
    int level;char data;treenode *parent;treenode *child[maxn];treenode(Node a){
    level=a.level;data=a.data;parent=NULL;for(int i=1;i<maxn;i++) child[i]=NULL;}
};
treenode *build_tree(Node *a,int n)
{
    treenode *root,*p,*q;if(n<1) return nullptr;root=new treenode(a[0]);p=root;for(int i=1;i<n;i++){
    q=new treenode(a[i]);while(p->level>=q->level) p=p->parent;q->parent=p;int j=0;while(p->child[j]!=NULL) j++;p->child[j]=q;p=q;}return root;
}
void output(treenode *root)
{
    if(root){
    for(int i=0;i<maxn;i++){
    if(root->child[i]) output(root->child[i]);else break;}printf("%c",root->data);}
}
int main()
{
    cin>>n;getchar();for(int i=0;i<n;i++){
    scanf("(%d,%c)",&a[i].level,&a[i].data);getchar();}treenode *root=build_tree(a,n);output(root);putchar('\n');return 0;
}
  相关解决方案