/*1106: noip2004普及組第3題 fbi樹
時間限制: 1 sec 記憶體限制: 128 mb
提交: 10 解決: 9
[提交] [狀態] [討論版] [命題人:外部匯入]
題目描述
我們可以把由「0」和「1」組成的字串分為三類:全「0」串稱為b串,全「1」串稱為i串,既含「0」又含「1」的串則稱為f串。
fbi樹是一種二叉樹,它的結點型別也包括f結點,b結點和i結點三種。由乙個長度為2n的「01」串s可以構造出一棵fbi樹t,遞迴的構造方法如下:
1) t的根結點為r,其型別與串s的型別相同;
2) 若串s的長度大於1,將串s從中間分開,分為等長的左右子串s1和s2;由左子串s1構造r的左子樹t1,由右子串s2構造r的右子樹t2。
現在給定乙個長度為2n的「01」串,請用上述構造方法構造出一棵fbi樹,並輸出它的後序遍歷序列。
輸入第一行是乙個整數n(0 <= n <= 10),第二行是乙個長度為2n的「01」串。
輸出 包括一行,這一行只包含乙個字串,即fbi樹的後序遍歷序列。
【資料規模】
對於40%的資料,n <= 2;
對於全部的資料,n <= 10。
樣例輸入
310001011
樣例輸出
ibfbbbfibfiiiff
提示二叉樹:二叉樹是結點的有限集合,這個集合或為空集,或由乙個根結點和兩棵不相交的二叉樹組成。這兩棵不相交的二叉樹分別稱為這個根結點的左子樹和右子樹。
後序遍歷:後序遍歷是深度優先遍歷二叉樹的一種方法,它的遞迴定義是:先後序遍歷左子樹,再後序遍歷右子樹,最後訪問根。
noip
[提交] [狀態]
*/#include
using
namespace
std;
int a[1025
];void check(int l,int
r)
if(t0==1&&t1==1
) printf("f
");else
if(t0==1
) printf("b
");else
if(t1==1
) printf("i
");}void dfs(int l,int
r)
int mid=(l+r)>>1
; dfs(l,mid);
dfs(mid+1
,r);
check(l,r);
}int
main()
這一道題其實還是比較簡單的
後序遍歷就是先遍歷左子樹 再遍歷右子樹 最後遍歷根節點,所以這一道題只要從樹根開始跑乙個深搜dfs就行了
在跑深搜的過程中 先遍歷當前節點的左右子樹 再列印該節點的fbi值
NOIP 2004 普及組 複賽 FBI樹
noip 2004 普及組 複賽 fbi樹 1.閱讀題目,還有些不知所云。2.對樣例進行手動模擬,弄明白題意了。fbi樹如下圖所示 ff f f b f i i b b b i b i i 1 t的根結點為r,其型別與串s的型別相同 此句是核心中的核心,也即f b i三種根節點。3.接下來程式設計實...
普及 NOIP 2004 花生採摘
題目描述 魯賓遜先生和多多都很開心,因為花生正是他們的最愛。在告示牌背後,路邊真的有一塊花生田,花生植株整齊地排列成矩形網格 如圖1 有經驗的多多一眼就能看出,每棵花生植株下的花生有多少。為了訓練多多的算術,魯賓遜先生說 你先找出花生最多的植株,去採摘它的花生 然後再找出剩下的植株裡花生最多的,去採...
NOIP2004普及組 合併果子
題目描述 description 在乙個果園裡,多多已經將所有的果子打了下來,而且按果子的不同種類分成了不同的堆。多多決定把所有的果子合成一堆。每一次合併,多多可以把兩堆果子合併到一起,消耗的體力等於兩堆果子的重量之和。可以看出,所有的果子經過n 1次合併之後,就只剩下一堆了。多多在合併果子時總共消...