NOIP2018普及組 對稱二叉樹

2021-09-25 12:32:49 字數 1182 閱讀 4543

就是一道 純爆搜

(並且**非常簡潔)

不知道為什麼放在第四題 被擺渡車卡了半天的我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點吧,寫了一會兒會兒作業,但我覺得這不是考砸了的理由 誰叫我本來就如此之水 第二天早上很早就起床了,還順便跟外婆還有老媽去小區外面吃了個早餐。然後老媽帶我來了考場,也是在附近萬達吃了飯,走路就花了我差不...