我們用兩個陣列 l,r 分別儲存 第 i 號根節點的左右兒子 ,在讀取的時候標記其有沒有父節點,然後就可以找出其父節點。
然後我們可以從根節點開始遍歷,如果是完全二叉樹,那麼最後乙個節點的編號一定等於節點數,可以看圖中藍色部分,我們只需要用乙個maxn記錄dfs過程中最大值,最後判斷一下與n的關係即可
#include
#include
#include
#include
#include
using
namespace std;
const
int n =25;
int n;
int l[n]
, r[n]
;//i號節點的左右兒子
bool is_father[n]
;//有沒有父親節點
int maxn, last;
//最後乙個節點的值
void
dfs(
int root,
int k)
if(l[root]!=-
1)dfs(l[root]
, k *2)
;if(r[root]!=-
1)dfs(r[root]
, k *2+
1);}
intmain()
if(b !=
"-")
}//求根節點
int root =0;
while
(is_father[root]
) root++
;dfs
(root,1)
;if(maxn > n)
else
return0;
}
浙大PAT甲級 1110 判斷是否為完全二叉樹
這個題關鍵是如何判斷是否為完全二叉樹。通過bfs廣搜來進行判斷如果乙個結點沒有左二子,有右兒子那麼不是完全二叉樹 或者前乙個結點無左二子或者倆個兒子都沒有而這個結點卻有孩子,那麼不是完全二叉樹。否則就是完全二叉樹。ac include include include include include ...
PAT甲級真題1153
pat 准考證號由 44 部分組成 第 11 位是級別,即 t 代表頂級 a 代表甲級 b 代表乙級 第 2 42 4 位是考場編號,範圍從 101101 到 999999 第 5 105 10 位是考試日期,格式為年 月 日順次各佔 22 位 最後 11 1311 13 位是考生編號,範圍從 00...
PAT甲級真題 1014 Wait In Line
一 題目 二 思路 題意 模擬排隊,但和實際排隊的區別在於 思路 模擬排隊,記錄消費者辦理結束所需的總時間 以分鐘為單位,最後轉換為時刻,由等待時間 辦理時間組成 若等待時間wt 540,則給予sorry 否則,根據總時間sum算出相應時刻 注意 當兩個視窗同樣長且均未滿時,要同時入隊消費者,使之隊...