E3 F 姜 二叉樹

2021-10-24 16:25:59 字數 1622 閱讀 6085

俗話說得好,姜還是老的辣。

holmiumts很喜歡種姜,但他自己卻從來不吃姜。他年初的時候往土裡埋了一塊姜。

每隔一段時間,他就會把土裡的姜全部挖出來,每一塊都切成兩半,然後再埋進土裡。每次埋之前,他都會測定每一塊姜的辣度。

經過k次之後,他得到了一棵有2k個葉子的完全二叉樹,每個結點都記錄了對應姜的辣度,他稱之為「族譜」。

現在有兩張這樣的「族譜」,你需要判斷兩張「族譜」是否相等。

「族譜」相等的定義:

1、對於在族譜葉子上的姜,如果他們的辣度相同則相等。

2、對於其它的姜,如果他們的辣度相等且他們產生的仔姜的辣度也對應相等,則他們相等。(這裡的對應不要求順序,即一塊的左側仔薑可以對應另一塊的右側仔薑)

3、如果一塊姜在族譜的葉子上而另一塊不在葉子上,則他們不相等。

4、兩份族譜相等當且僅當兩份族譜位於根的姜相等。

輸入

第一行包含乙個整數,為資料的組數t

接下來包含3t行,每三行對應一組資料

每組資料第一行包含乙個整數k,含義見題目描述。

接下的兩行每行包含2(k+1)−1個非負整數,對應乙份族譜的層次遍歷。

輸出

對於每組資料,輸出yes或no,表示族譜是否相同。

輸入樣例

2

11 2 3

1 3 2

21 2 2 3 3 4 4

1 2 2 3 4 3 4

輸出樣例

yes

no

資料範圍與約定

1<=t<=100

1<=k<=10

保證辣度非負且在int範圍內

提示

兩份族譜能否轉成乙個易於判斷的族譜形式?

問就是不吃蔥薑蒜.jpg

根據助教的hint(hint每次都讓迷惑的我更加迷惑2333),把陣列轉化成容易判斷的二叉樹本樹形式。

再用從根節點處依次遞迴,判斷兩個二叉樹是否相等(不得不說雖然菜雞的我難以掌握遞迴,但它真的太強遼)

#include

#include

struct node

;typedef

struct node node;

typedef

struct node *nodeptr;

int nums_a[

2100

], nums_b[

2100];

nodeptr create

(int a,

int i,

int n)

;//生成二叉樹

intisequal

(nodeptr t1,nodeptr t2)

;//判斷兩個二叉樹是否相等

intmain()

}nodeptr create

(int a,

int i,

int n)

intisequal

(nodeptr t1,nodeptr t2)

return0;

}

二叉樹3(恢復二叉樹)

給一顆帶權 權值各不相同,都是小於10000的正整數 的二叉樹的中序和後序遍歷序列,找乙個葉子使得它到根的路徑上的權值盡可能小,如果有多解,取葉子權值小的。輸入中第一行為中序遍歷,第二行為後序遍歷。例如輸入 3 2 1 4 5 7 6 3 1 2 5 6 7 4 輸出輸入 7 8 11 3 5 16...

F 二叉樹的遍歷

給出一棵二叉樹的中序和前序遍歷,輸出它的後序遍歷。input 本題有多組資料,輸入處理到檔案結束。每組資料的第一行包括乙個整數n,表示這棵二叉樹一共有n個節點。接下來的一行每行包括n個整數,表示這棵樹的中序遍歷。接下來的一行每行包括n個整數,表示這棵樹的前序遍歷。3 n 100 output 每組輸...

二叉樹 二叉樹

題目描述 如上所示,由正整數1,2,3 組成了一顆特殊二叉樹。我們已知這個二叉樹的最後乙個結點是n。現在的問題是,結點m所在的子樹中一共包括多少個結點。比如,n 12,m 3那麼上圖中的結點13,14,15以及後面的結點都是不存在的,結點m所在子樹中包括的結點有3,6,7,12,因此結點m的所在子樹...