二叉查找树读取(层次读取的实现方法)
3. Level-order Traversal
Time Limit: 1000MS Memory Limit: 10000K
Description:
给出一个正整数序列,请按照顺序建立二叉查找树(BST),然后层次化输出,即先输出根结点,然后是根结点的左孩子、根结点的右孩子,一层一层,从左到右地输出。
例:输入顺序为37,24,42,32,7,40,2,42,120。对应的二叉查找树如下所示:
代码为:
1 #include<iostream> 2 using namespace std; 3 int pt[10000]={NULL}; 4 int pr[10000]={NULL}; 5 void binaryinsert(int*,int,int); 6 int main() 7 { int num,i,j,n=0,h;int root; 8 cin>>h; 9 for(j=0;j<h;j++){ 10 while(cin>>num) 11 { 12 pt[n++]=num; 13 if(cin.get()=='\n') break; 14 } 15 pr[0]=pt[0]; 16 root=0; 17 for(i=1;i<n;i++) 18 { binaryinsert(pr,pt[i],root);} 19 for(i=0;i<10000;i++) 20 if(pr[i]!=NULL) 21 cout<<pr[i]<<" "; 22 cout<<endl; 23 n=0; 24 for(int k=0;k<10000;k++) pr[k]=NULL; 25 } 26 } 27 void binaryinsert(int*pr,int pt,int root) 28 { 29 if(pr[root]==NULL) {pr[root]=pt;return;} 30 if(pr[root]>pt) binaryinsert(pr,pt,2*root+1); 31 else binaryinsert(pr,pt,2*root+2); 32 33 }
层次化输出为:37 24 42 7 32 40 42 2 120
Input:
首先输入整数N,表示N种测试情况。接下来是每种测试情况的输入数据。
每种测试情况有一行,即正整数序列。
Output:
每种测试情况对应一行层次化输出序列。
Sample Input:
2
37,24,42,32,7,40,2,42,120
120,42,7,2,32,42,24,37,40
Sample Output:
37 24 42 7 32 40 42 2 120
120 42 7 42 2 32 24 37 40
结构性开销太大,数组表示的二叉树宜用于完全满二叉树,和较平衡的二叉树。