3 条题解

  • 0
    @ 2026-5-3 17:09:48
    
    #include <bits/stdc++.h>
    
    using namespace std;
    
    struct node{
        int val;
        int l,r;
    };//注意这里要有分号
    
    node tree[2005];
    
    int main() {
        int n;
        cin>>n;
        if(n==0){
            return 0;
        }
        for(int i=0;i<n;i++){
            cin>>tree[i].l>>tree[i].r;
        }
        for(int i=0;i<n;i++){
            cin>>tree[i].val;
        }
        queue<int> q;
        q.push(0);
        while(!q.empty()){
            int size=q.size();//记录当前层有几个节点
            while(size--){//处理当前层,注意过程中q可能会增加节点所以不能用q.size()
                int u=q.front();//获取当前队首的元素值
                q.pop();//弹出(移除)队首
                cout<<tree[u].val;
                cout<<" ";//当前层还没结束,输出空格
                //当前节点的左右儿子节点需要加入队列,排队待办
                //因为我们已经记录了当前层的元素个数size所以队列变长不会影响当前层的处理
                if(tree[u].l!=-1){
                    q.push(tree[u].l);
                }
                if(tree[u].r!=-1){
                    q.push(tree[u].r);
                }
            }
            cout<<endl;//每层结束后换行        
        }
        return 0;
    }
    

    信息

    ID
    19410
    时间
    1000ms
    内存
    128MiB
    难度
    9
    标签
    (无)
    递交数
    26
    已通过
    4
    上传者