PAT(A)-1102. Invert a Binary Tree (25)(数据结构+bfs)

    xiaoxiao2021-03-25  110

    记录一个菜逼的成长。。

    题目链接

    题目大意: 给你n个点的树,让你输出层序和中序遍历序列。

    #include <bits/stdc++.h> using namespace std; #define ALL(v) (v).begin(),(v).end() #define cl(a,b) memset(a,b,sizeof(a)) #define clr clear() #define pb push_back typedef long long LL; struct Node{ int l,r; }tree[100]; int d[20]; void bfs(int x) { queue<int>q; q.push(x); int flag = 1; while(!q.empty()){ int f = q.front();q.pop(); if(flag)printf("%d",f),flag = 0; else printf(" %d",f); if(tree[f].r != -1)q.push(tree[f].r); if(tree[f].l != -1)q.push(tree[f].l); } puts(""); } int flag; void in_tra(int x) { if(x == -1)return ; in_tra(tree[x].r); if(flag)printf("%d",x),flag = 0; else printf(" %d",x); in_tra(tree[x].l); } int main() { int n; while(~scanf("%d",&n)){ for( int i = 0; i < n; i++ )tree[i].l = tree[i].r = -1; char s1[3],s2[3]; for( int i = 0; i < n; i++ ){ scanf("%s%s",s1,s2); if(isdigit(s1[0])){ tree[i].l = s1[0] - '0'; d[s1[0] - '0']++; } if(isdigit(s2[0])){ tree[i].r = s2[0] - '0'; d[s2[0] - '0']++; } } int root ; for( int i = 0; i < n; i++ ){ if(!d[i]){root = i;break;} } bfs(root); flag = 1; in_tra(root); puts(""); } return 0; }
    转载请注明原文地址: https://ju.6miu.com/read-24533.html

    最新回复(0)