A1149 FBI樹 我的雙螺旋解法 1

2021-08-31 19:14:46 字數 865 閱讀 3370

問題描述 

我們可以把由「0」和「1」組成的字串分為三類:全「0」串稱為b串,全「1」串稱為i串,既含「0」又含「1」的串則稱為f串。

fbi樹是一種二叉樹,它的結點型別也包括f結點,b結點和i結點三種。由乙個長度為2^n的「01」串s可以構造出一棵fbi樹t,遞迴的構造方法如下:

1)t的根結點為r,其型別與串s的型別相同;

2)若串s的長度大於1,將串s從中間分開,分為等長的左右子串s1和s2;由左子串s1構造r的左子樹t1,由右子串s2構造r的右子樹t2。

現在給定乙個長度為2^n的「01」串,請用上述構造方法構造出一棵fbi樹,並輸出它的後序遍歷序列。

輸入格式

第一行是乙個整數n(0 <= n <= 10),第二行是乙個長度為2^n的「01」串。

輸出格式

包括一行,這一行只包含乙個字串,即fbi樹的後序遍歷序列。

樣例輸入

310001011

樣例輸出

ibfbbbfibfiiiff

我的解法:可以把給定的看做葉節點,之後以此計算他們的父親節點。考慮到最後需要後序遍歷序列,所以逐層計算,借助雙螺旋,節省空間,迴圈次數正比樹高。

#include#include#includeusing namespace std;

#define n 1<<11

char f[2][n];

int main()

t=2*t+1;

_n=_n/2;

_length+=_n;

k=kk;

} for(int i=0,j=0;i<_length;i++)

cout

FBI樹(二叉樹的遍歷)

題目描述 我們可以把由 0 和 1 組成的字串分為三類 全 0 串稱為b串,全 1 串稱為i串,既含 0 又含 1 的串則稱為f串。fbi樹是一種二叉樹 1 它的結點型別也包括f結點,b結點和i結點三種。由乙個長度為2n的 01 串s可以構造出一棵fbi樹t,遞迴的構造方法如下 t的根結點為r,其型...

FBI樹 二叉樹的簡單建立與運用

描述 我們可以把由 0 和 1 組成的字串分為三類 全 0 串稱為b串,全 1 串稱為i串,既含 0 又含 1 的串則稱為f串。fbi樹是一種二叉樹1,它的結點型別也包括f結點,b結點和i結點三種。由乙個長度為2 n的 01 串s可以構造出一棵fbi樹t,遞迴的構造方法如下 1 t的根結點為r,其型...

洛谷 P1087 FBI樹(簡單的遞迴建樹)

我們可以把由 00 和 11 組成的字串分為三類 全 00 串稱為bb串,全 11 串稱為i串,既含 00 又含 11 的串則稱為f串。fbifbi樹是一種二叉樹,它的結點型別也包括ff結點,bb結點和i結點三種。由乙個長度為2 n2n的 0101 串s可以構造出一棵fbifbi樹tt,遞迴的構造方...