m0_60346415 2022-10-10 22:50 采纳率: 100%
浏览 58
已结题

二叉树的按层遍历 c++

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

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

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

img

img

#include <iostream>
#include <string>
#include <stdio.h>
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;i<N;i++) check[i]=1;
        for(i=0;i<N;i++)
        {
            scanf("%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<N;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<<s[i];
        else 
        {
            cout<<endl; 
            return;
        } 
    }
 } 
 
int main()
{
    string s[50];
    int a;
    a=build(T1);
    stage(T1[a],0,s);
    output(s);
    return 0;
}



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

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

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

###### 我想要达到的结果
  • 写回答

2条回答 默认 最新

  • _GX_ 2022-10-10 23:29
    关注
        // ...
        // 这里是找根结点。一开始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);
    }
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

问题事件

  • 系统已结题 10月19日
  • 已采纳回答 10月11日
  • 创建了问题 10月10日

悬赏问题

  • ¥15 平板录音机录音问题解决
  • ¥15 请问维特智能的安卓APP在手机上存储传感器数据后,如何找到它的存储路径?
  • ¥15 (SQL语句|查询结果翻了4倍)
  • ¥15 Odoo17操作下面代码的模块时出现没有'读取'来访问
  • ¥50 .net core 并发调用接口问题
  • ¥15 网上各种方法试过了,pip还是无法使用
  • ¥15 用verilog实现tanh函数和softplus函数
  • ¥15 Hadoop集群部署启动Hadoop时碰到问题
  • ¥15 求京东批量付款能替代天诚
  • ¥15 slaris 系统断电后,重新开机后一直自动重启