PTA是否完全二叉搜索树

一、题目描述

 

 二、解题思路

  用数组模拟建完全二叉树,可知节点个数,若为完全二叉树,则前n个节点没有为0的,若前面有为0的,那么我们就输出No。至于输出节点,我们可以一直遍历到找到n个数再退出。刚好从前到后满足层次遍历。

三、代码实现

 1 #include "bits/stdc++.h"
 2 using namespace std;
 3 int vis[(2 << 21) + 10];//多乘2,怕卡bug
 4 int main()
 5 {
 6     int n;
 7     int d;
 8     cin >> n;
 9     for(int i = 1;i <= n;i++){
10         cin >> d;
11         int j = 1;
12         while(vis[j]){
13             if(d > vis[j])
14                 j = j * 2;
15             else
16                 j = j * 2 + 1;
17         }
18         vis[j] = d;
19     }
20     bool ok = false;
21     vector <int> ans;
22     for(int i = 1;i <= n;i++)
23         if(!vis[i]){
24             ok = true;
25             break;
26         }
27     int k = 1;
28     int len = 0;
29     while(len != n){
30         if(vis[k]){
31             ans.push_back(vis[k]);
32             len++;
33         }
34          k++;
35     }
36     if(ok){
37         for(int i = 0;i < n;i++){
38             if(i == n - 1)
39                 cout << ans[i] << endl;
40             else
41                 cout << ans[i] << ' ';
42         }
43         cout << "NO" << endl;
44     }
45     else {
46         for(int i = 1;i <= n;i++){
47             if(i == n)
48                 cout << vis[i] << endl;
49             else
50                 cout << vis[i] << ' ';
51         }
52         cout << "YES" << endl;
53     }
54     return 0;
55 }
posted @ 2022-03-19 15:18  scannerkk  阅读(51)  评论(0)    收藏  举报