题意:给定一个二叉树,要求输出翻转后的二叉树的层序序列和中序序列。
思路:不用真的翻转,只需要在输出时先访问右结点再访问左结点即可。
代码:
#include <cstdio> #include <cstdlib> #include <cstring> #include <queue> using namespace std; struct Node{ int left,right; }tree[15]; int isRoot[15]={0}; int n; void levelOrder(int root) { int cnt=0; queue<int> q; q.push(root); while(!q.empty()){ int u=q.front(); q.pop(); printf("%d",u); cnt++; if(cnt==n) printf("\n"); else printf(" "); if(tree[u].right!=-1) q.push(tree[u].right); if(tree[u].left!=-1) q.push(tree[u].left); } } void inOrder(int root) { static int k=0; if(root!=-1){ inOrder(tree[root].right); printf("%d",root); k++; if(k==n) printf("\n"); else printf(" "); inOrder(tree[root].left); } } int main() { scanf("%d",&n); char s1[5],s2[5]; for(int i=0;i<n;i++){ scanf("%s %s",s1,s2); if(s1[0]=='-') tree[i].left=-1; else { tree[i].left=atoi(s1); isRoot[tree[i].left]=1; } if(s2[0]=='-') tree[i].right=-1; else { tree[i].right=atoi(s2); isRoot[tree[i].right]=1; } } int root=0; while(isRoot[root]==1) root++; levelOrder(root); inOrder(root); return 0; }