PAT题解——1102. Invert a Binary Tree (25)

xiaoxiao2021-02-28  146

[声明]本解法直接采用rch[]和lch[]两个数组来存储二叉树的信息,从程序的写法来看比《算法笔记》上的解法会更简单些; 1. 题目链接:https://www.patest.cn/contests/pat-a-practise/1102 2. 解题思路:直接存储翻转后的二叉树信息;然后层次和中序遍历输出即可; 3. AC代码:

#include<cstdio> #include<queue> #include<cstring> using namespace std; int n,lch[20],rch[20]; //层次遍历 int num=0;//用于判断是否要输出空格 void bfs(int root){ queue<int> q; q.push(root); while(!q.empty()){ int p=q.front();q.pop(); num++; printf("%d",p); if(num<n) printf(" "); if(lch[p]!=-1) q.push(lch[p]); if(rch[p]!=-1) q.push(rch[p]); } printf("\n"); return; } //中序遍历 void dfs(int root){ if(root==-1) return; dfs(lch[root]); printf("%d",root);num++;if(num<n) printf(" "); dfs(rch[root]); } int main(){ scanf("%d",&n);getchar();char str[4]; int hash[20];//都有可能是根节点 memset(hash,1,sizeof(hash)); for(int i=0;i<n;i++){ gets(str); if(str[0]=='-') rch[i]=-1;else {rch[i]=str[0]-'0';hash[str[0]-'0']=0;} if(str[2]=='-') lch[i]=-1;else {lch[i]=str[2]-'0';hash[str[2]-'0']=0;} }//完成翻转和建树 int root; for(int i=0;i<n;i++) if(hash[i]) root=i;//找到根节点 bfs(root);//层次遍历 num=0; dfs(root);//中序遍历 return 0; }
转载请注明原文地址: https://www.6miu.com/read-32726.html

最新回复(0)