输入数据分为多组,第一行是测试数据的组数n,下面的n行分别代表一棵二叉树。每棵二叉树的结点均为正整数,数据为0代表当前结点为空,数据为-1代表二叉树数据输入结束,-1不作处理。二叉树的构造按照层次顺序(即第1层1个整数,第2层2个,第3层4个,第4层有8个......,如果某个结点不存在以0代替),比如输入:
1 2 0 3 4 -1得到的二叉树如下:
输出
输出每棵二叉树的中序序列。
样例输入
2
1 -1
1 2 0 3 4 -1
样例输出
1
3 2 4 1
提示
输出的每个节点值后有一个空格。
#include <iostream> #include <cstring> #include <algorithm> using namespace std; int a[1005]; int flag,k; int inorder(int n) { if(n>k) return 0; inorder(2*n); if(a[n]) cout<<a[n]<<" "; inorder(2*n+1); } int main() { int n,m,i,j,test; cin>>test; while(test--){ memset(a,0,sizeof(a)); k=0; flag=1; for(;;){ cin>>m; if(m==-1) break; a[++k]=m; } inorder(1); cout<<"\n"; } }
遍历的时候应该从1开始