zoukankan      html  css  js  c++  java
  • PAT A1102 Invert a Binary Tree (25分)


    反转树可以在构建树的过程中完成
    层序遍历的方式类似于BFS

    #include<cstdio>
    #include<algorithm>
    #include <vector>
    #include<queue>
    using namespace std;
    const int N = 10;
    struct node{
        int v;
        int left = -1;
        int right =-1;
    }Node[N];
    bool isroot[N];
    vector<int> in,bfs;
    int chartoint(char a){//0..9
        if(a>='0'&&a<='9'){
            return (a -'0');
        }else{
            return -1;
        }
    }
    
    void BFS(int root){
        if(root==-1) return;
        queue<int> q;
        q.push(root);
        while(q.empty()==false){
            int f = q.front();
            q.pop();
            if(Node[f].left!=-1)
                q.push(Node[f].left);
            if(Node[f].right!=-1)
                q.push(Node[f].right);
            bfs.push_back(f);
        }
        return;
    }
    void inOrder(int root){
        if(root==-1) return;    
        inOrder(Node[root].left);
        in.push_back(Node[root].v);
        inOrder(Node[root].right);        
        return;
    }
    int main(){
        int n;
        scanf("%d",&n);
        fill(isroot,isroot+N,true);//初始化
        for(int i = 0;i<n;i++){
            char l,r;
            getchar();//吸收
    
            scanf("%c %c",&l,&r);
            Node[i].left = chartoint(r);//插入时就更换左右子树的位置
            Node[i].right = chartoint(l);
            Node[i].v = i;
            if(Node[i].left!=-1) isroot[Node[i].left] = false;
            if(Node[i].right!=-1) isroot[Node[i].right] = false;
        }
        int root = -1;
        for(int i = 0;i<n;i++){
            if(isroot[i]==true){
                root = i;
                break;
            }
        }
        BFS(root);
        inOrder(root);
        for(int i = 0;i < n;i++){
            printf("%d",bfs[i]);
            if(i!=n-1) printf(" ");
        }
        printf("
    ");
        for(int i = 0;i < n;i++){
            printf("%d",in[i]);
            if(i!=n-1) printf(" ");
        }
        return 0;
    }
    
    
    
  • 相关阅读:
    19凡路国庆小作业的题解集合(qwq只是我出的题,我会标明出处的)
    一个for打印99乘法表(这是一种实现方式,可以多种方式的)
    采访学长所得
    洛谷P1028 数的计算
    ccf 2019_03_2 二十四点
    ccf 201812-1 小明上学
    洛谷P3387 【模板】缩点
    洛谷P3216 [HNOI2011]数学作业
    洛谷P1471 方差
    HDU 4114 Disney's FastPass
  • 原文地址:https://www.cnblogs.com/shuibeng/p/13604986.html
Copyright © 2011-2022 走看看