就是一道 純爆搜
(並且**非常簡潔)
不知道為什麼放在第四題 被擺渡車卡了半天的我qaq
先跑一遍dfs預處理出所有子樹的大小sum
從1到n,以每乙個節點為跟節點向下搜尋,判斷是否是對稱二叉樹,不斷更新滿足條件的最大sum值
設當前節點為x, l[x], r[x]分別代表當前節點的左右子節點
dfs(l[x],r[x])每個向下比較:
1.若兩個子節點值都為-1則返回ture
2.若兩個子節點值都不為-1且相等並且dfs(l[r[x]],r[l[x]])和dfs(r[l[x]],l[r[x]])返回值都為1 ,則返回ture
3.否則返回false
一句話概括:
如果這顆樹是對稱的,那麼它的左子節點=右子節點,左子節點的右子節點=右子節點的左子節點……
依次向下尋找,然後遞迴 (其實畫個圖就非常清晰了)
#include
.h>
using namespace std;
typedef long long ll;
const int n
=1000005
;int n,m,sum[n]
,l[n
],r[n]
,a[n];
ll read()
while
(ch>=
'0'&&ch<=
'9')
return sum*f;
}void
dfs(int x)
if(r[x]!=-
1)}int check
(int x,int y)
int main()
dfs(1)
; int ans=0;
for(int i=
1;i<=n;i++
) cout<
return0;
}
NOIP2018普及組複賽第四題 對稱二叉樹
前言 剛剛參加完csp2020的初賽.直接崩潰,感覺普及提高都進不了,頹廢了來刷刷題,打了半天才打出這道題,心態炸了.一棵有點權的有根樹如果滿足以下條件,則被軒軒稱為對稱二叉樹 二叉樹 將這棵樹所有節點的左右子樹交換,新樹和原樹對應位置的結構相同且點權相等。現在給出一棵二叉樹,希望你找出它的一棵子樹...
對稱二叉樹 NOIP2018
首先,我們將題目給定的對稱二叉樹的定義來梳理一遍 一棵有點權的有根樹如果滿足以下條件 1.這是一棵二叉樹 2.將這棵樹所有節點的左右子樹交換,新樹和原樹對應位置的結構相同且點權相等。則這顆樹就是一棵對稱二叉樹 我們來看9 12的資料 這是一棵滿二叉樹 所以,對於這一檔資料,我們只要判斷他們的權值是否...
NOIP2018普及組 參賽總結
發現就我只打了這麼一點字,所以再重新發一下 考前 考試前一天晚上一直在看電視 看到了10點還是11點吧,寫了一會兒會兒作業,但我覺得這不是考砸了的理由 誰叫我本來就如此之水 第二天早上很早就起床了,還順便跟外婆還有老媽去小區外面吃了個早餐。然後老媽帶我來了考場,也是在附近萬達吃了飯,走路就花了我差不...