PAT Complete Binary Search Tree (30)

题目简介:

  给定一个n,再给出n个数,讲这n个数构成一颗完全二叉树,然后在层次遍历这可完全二叉树

解题思路:

  1、中序遍历完全二叉树可以得到排序好的数列;

  2、采用数组存储完全二叉树,这样层次遍历就变成了数组的顺序输出;

代码:

 1     #include<stack>
 2     #include<queue>
 3     #include<iostream>
 4     #include<algorithm>
 5     using namespace std;
 6     #define N 1000
 7     int tree[N];
 8     int nums[N];
 9     int cur=0;
10     void create(int len)
11     {
12         stack<int> s;
13         int i=0;
14         while(i<len)
15         {
16             s.push(i);
17             i+=i+1;
18         }
19         while(!s.empty())
20         {
21             i=s.top();
22             tree[i]=nums[cur++];
23             s.pop();
24             i+=i+2;
25             if(i<len)
26             {
27                 while(i<len)
28                 {
29                     s.push(i);
30                     i+=i+1;
31                 }
32             }
33         }
34     }
35     int main()
36     {
37         //freopen("in.txt","r",stdin);
38         //freopen("out.txt","w",stdout);
39         int n;
40         scanf("%d",&n);
41         for(int i=0;i<n;i++)
42         {
43             scanf("%d",nums+i);
44         }
45         sort(nums,nums+n);
46         cur=0;
47         create(n);
48         for(int i=0;i<n;i++)
49         {
50             if(i)
51             {
52                 printf(" %d",tree[i]);
53             }
54             else
55             {
56                 printf("%d",tree[i]);
57             }
58         }
59         return 0;
60     }

 

posted @ 2016-11-07 11:27  冠king  阅读(65)  评论(0)    收藏  举报