紀中21日c組T1 1575 二叉樹

2022-05-31 15:15:09 字數 1929 閱讀 4522

(file io): input:tree.in output:tree.out

時間限制: 1000 ms  空間限制: 262144 kb  具體限制  

goto problemset

在眾多的資料結構中,二叉樹是一種特殊而重要的結構,有著廣泛的應用。二叉樹或者是乙個節點,或者有且僅有乙個節點位二叉樹的根,其餘節點被分成兩個互不相交的子集,乙個作為左子集,另乙個作為右子集。每個子集又是乙個二叉樹。

遍歷一棵二叉樹就是按某條搜尋路徑巡訪其中每個節點,使得每個節點均被訪問一次,而且僅被訪問一次。最常用的有三種遍歷方式:

(1)前序遍歷:若二叉樹為空,則空操作;否則先訪問根節點,接著前序遍歷左子樹,最後前序遍歷右子樹。

(2)中序遍歷:若二叉樹為空,則空操作;否則先中序遍歷左子樹,接著訪問根節點,最後再中序遍歷右子樹。

(3)後序遍歷:若二叉樹為空,則空操作;否則先後序遍歷左子樹,接著後序遍歷右子樹,最後再訪問根節點。

例如圖1所示的二叉樹前序遍歷的順序是abcd,中序遍歷的順序是cbad,後序遍歷的順序是cbda。

對一棵二叉樹,如果給出前序遍歷和中序遍歷的節點訪問順序,那麼後序遍歷的順序是唯一確定的,也很方便地求出來。但如果現在只知道前序遍歷和後序遍歷的順序,中序遍歷的順序是不確定的,例如:前序遍歷的順序是abcd,而後序遍歷的順序是cbda,那麼就有兩棵二叉樹滿足這樣的順序,見圖1和圖2。

現在的問題是給定前序遍歷和後序遍歷的順序,要求出總共有多少棵不同形態的二叉樹滿足這樣的遍歷順序。

整個輸入有兩行,第一行給出前序遍歷的訪問順序,第二行給出後序遍歷的訪問順序。

二叉樹的節點用乙個大寫字母表示,不會有兩個節點標上相同字母。輸入資料不包含空格,且保證至少有一棵二叉樹符合要求。

輸出乙個整數,為符合要求的不同形態的二叉樹的數目。

abcd

cbda

2
題目中又沒有……

我來補充吧:長度不會超過26.因為

二叉樹的節點用乙個大寫字母表示,不會有兩個節點標上相同字母

暴力列舉2n呵呵

這麼簡單……我也不想打了
code1

預計分數:100分左右

找規律只看前序和後序遍歷

這兩種遍歷方式是反著的

也就是說,對於每一顆樹,

在左序中是根節點->左節點->右節點;

在右序中是右節點->左節點->根節點。

所以將左序從左開始,右序從右開始

相同的就直接去掉(說明是根節點)

不相同的話就從中剖開,分治再這樣弄

bxd……不想打

呵呵

因為相鄰的點(父子關係)必定在一起

無論是左序還是右序(只是反過來了)

所以建立乙個鄰接矩陣

把左序中相鄰的點連上

再一樣的掃瞄右序,

看看相鄰點的反向邊是否存在

若存在,答案*2

這個方法我喜歡……

1 #include2 #include3 #include4 #include5 #include6 #include7 #include

8 #include9 #include10

#define il inline

11using

namespace

std;

12 il int

read()

1322

23string

a,b;

24int ans=1;25

bool memory[26][26

];26

intmain()

27

end

紀中訓練4月9日B組T1

題目 分析 二分 判斷 1.排序 2.二分答案 3.判斷 說了白說 詳細一點就是 1.排序 2.二分答案,0 1018 3.判斷,通過計算得出當前區間可以有的奶牛,再通過計算得出下個區間的頭,然後就一直這麼幹 wa90!沒辦法打了個表 靜等不用打表的大佬來糾正錯誤 wa90 include incl...

紀中10日T1 2313 動態仙人掌

file io input dinosaur.in output dinosaur.out 時間限制 1500 ms 空間限制 524288 kb 具體限制 goto problemset 沙雕遊戲 反正我沒玩過 考試時想的是對的 為什麼就是沒有分呢?首先看看仙人掌有幾種情況 兩個比較分開的仙人掌 ...

紀中訓練4月4日B組反思

我這個蒟蒻 又裂開了 10分 10 0 0 24th 題目 略微一想,可以暴力 於是就暴力了 絲毫沒有記得前幾天的話 神奇的是!沒有tle 當然,只不過wa了而已 反思 不要拿道題就去想暴力,要看看有沒有好演算法 題 外 話 為什麼要搞個1,難不成有個2?比賽完看題目,em,真香 回到正題 題目 這...