二叉查找树读取(层次读取的实现方法)

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

 

结构性开销太大,数组表示的二叉树宜用于完全满二叉树,和较平衡的二叉树。

 

 

posted on 2012-11-30 21:03  Besion王  阅读(353)  评论(0编辑  收藏  举报

导航