二叉树的按层遍历 c++

问题遇到的现象和发生背景

输入给出1棵二叉树的信息。对于该二叉树,第一行中给出一个非负整数N (≤20),即该树的结点数(此时假设结点从0到N−1编号);随后N行,第 i 行对应编号第 i 个结点,给出该结点中存储的1个英文大写字母、其左孩结点的编号、右孩结点的编号。如果孩结点为空,则在相应位置上给出 “-”。给出的数据间用一个空格分隔。注意:树的根为结点“A",并保证树中每个结点存储的字母是不同的。

有几行代码看不懂是什么意思能否讲解一下(看不懂的那几行已标注)

img

img

#include 
#include 
#include 
using namespace std;
struct Tree
{
    char data;
    int l,r;
} T1[50];

int build(struct Tree T[])
{
    int i,N;
    char cl,cr;
    int check[100];
    scanf("%d",&N);
    getchar();
    if(N)
    {
        for(i=0;i1;
        for(i=0;iscanf("%c %c %c",&T[i].data,&cl,&cr);
            getchar();
            if(cl!='-')
            {
                T[i].l=cl-'0';
                check[T[i].l]=-1;
            }
            else 
                T[i].l=-1;
            if(cr!='-')
            {
                T[i].r=cr-'0';
                check[T[i].r]=-1;
            }
            else 
                T[i].r=-1;
        }
         for(i=0;i//这里看不懂是什么意思
             if(check[i]==1)        //这里看不懂是什么意思
                 return i;              //这里看不懂是什么意思
     return -1;                      //这里看不懂是什么意思
     } 
}

void stage(struct Tree t, int k, string s[50])          //这里看不懂是什么意思
{
    s[k]+=t.data;
    if(t.l!=-1) stage(T1[t.l],k+1,s);
    if(t.r!=-1) stage(T1[t.r],k+1,s);
}

void output(string s[50])
{
    for (int i=0;i<50;i++)
    {
        if(s[i]!="") cout<else 
        {
            cout<return;
        } 
    }
 } 
 
int main()
{
    string s[50];
    int a;
    a=build(T1);
    stage(T1[a],0,s);
    output(s);
    return 0;
}



```###### 用代码块功能插入代码,请勿粘贴截图 

###### 运行结果及报错内容 

###### 我的解答思路和尝试过的方法 

###### 我想要达到的结果
    // ...
    // 这里是找根结点。一开始check数组元素初始化为1,构建二叉树时,每个子节点相应的check数组元素赋值为-1,因此只有根结点的check值是1
         for(i=0;i<N;i++)         //这里看不懂是什么意思
             if(check[i]==1)        //这里看不懂是什么意思
                 return i;              //这里看不懂是什么意思
     return -1;                      //这里看不懂是什么意思
     } 
}
 
// 这里是遍历二叉树,k表示深度,即把深度为k的结点编号添加到字符串数组下标为k的字符串中。得到的结果就是s数组中每一个元素依次表示每一层结点的编号。
void stage(struct Tree t, int k, string s[50])          //这里看不懂是什么意思
{
    s[k]+=t.data;
    if(t.l!=-1) stage(T1[t.l],k+1,s);
    if(t.r!=-1) stage(T1[t.r],k+1,s);
}

可以看看