日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

PAT甲级1110 Complete Binary Tree:[C++题解]判断完全二叉树

發布時間:2025/4/5 c/c++ 15 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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++题解]判断完全二叉树的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。