PAT甲级1110 Complete Binary Tree:[C++题解]判断完全二叉树
生活随笔
收集整理的這篇文章主要介紹了
PAT甲级1110 Complete Binary Tree:[C++题解]判断完全二叉树
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
文章目錄
- 題目分析
- 題目鏈接
題目分析
分析:
按照層序的順序將完全二叉樹存在下標從1開始的數組中。如果是完全二叉樹,會將數組中1 ~ n這些位置填滿,最大下標就是n,如果最大下標大于n,說明中間有空的,就不是完全二叉樹。
ac代碼
#include<bits/stdc++.h> using namespace std; const int N = 30; int n; bool has_father[N]; //找根結點,根結點的特點是:沒有父節點 int l[N], r[N]; int max_k;//點在數組中的最大下標 int max_id; //最后一個結點的編號//u是結點編號,k是結點下標 void dfs(int u ,int k){if( u == -1) return;//如果下標大于最大下標,就更新之//同時最后節點的編號max_id也隨之更新if(k > max_k) max_k = k , max_id = u;dfs(l[u], 2*k); //左子樹,結點下標 2*kdfs(r[u], 2*k +1); 右子樹,結點下標 2*k +1}int main(){memset(l ,-1 ,sizeof l);memset(r ,-1 ,sizeof r);cin>> n;for( int i = 0; i< n; i++){string a, b;cin>> a >> b;if(a != "-") l[i] = stoi(a),has_father[l[i]] =true;if(b != "-") r[i] = stoi(b),has_father[r[i]] =true;}int root = 0;//根結點rootwhile(has_father[root]) root++;dfs(root , 1);if(max_k == n) cout<<"YES"<<" "<<max_id<<endl;else cout<<"NO"<<" "<<root<<endl;}題目鏈接
PAT甲級1110 Complete Binary Tree
總結
以上是生活随笔為你收集整理的PAT甲级1110 Complete Binary Tree:[C++题解]判断完全二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: PAT甲级1102 Invert a B
- 下一篇: PAT甲级1115 Counting N