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 }
本文来自博客园,作者:{scanner},转载请注明原文链接:{https://home.cnblogs.com/u/scannerkk/}