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

2021-10-10 08:55:00 字數 1478 閱讀 5423

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

fbifbi樹是一種二叉樹,它的結點型別也包括ff結點,bb結點和i結點三種。由乙個長度為2^n2n的「0101」串s可以構造出一棵fbifbi樹tt,遞迴的構造方法如下:

tt的根結點為rr,其型別與串ss的型別相同;

若串ss的長度大於11,將串ss從中間分開,分為等長的左右子串s_1s1​和s_2s2​;由左子串s_1s1​構造r的左子樹t_1t1​,由右子串s_2s2​構造rr的右子樹t_2t2​。

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

第一行是乙個整數n(0 \le n \le 10)n(0≤n≤10),

第二行是乙個長度為2^n2n的「0101」串。

乙個字串,即fbifbi樹的後序遍歷序列。

輸入 #1複製

3

10001011

輸出 #1複製

ibfbbbfibfiiiff
對於40%的資料,n≤2;

對於全部的資料,n≤10。

#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include#include //int_100010n

#include //#include#define pp pair#define inf 0x3f3f3f3f

#define inf 0x7fffffff;

#define llinf 0x3f3f3f3f3f3f3f3fll

#define dinf 1000000000000.0

#define pi 3.1415926

#define ll unsigned int

#define mod 1000000007

#define wc 1e-18

typedef long long ll;

using namespace std;

int n;

char s[1050];

void jianshu(int x,int y)

int b=1,i=1;

for(int i=0; i<=y-x; i++)

if(b)

cout<<'b';

else if(i)

cout<<'i';

else

cout<<'f';

}int main()

樹 洛谷 P1087 FBI樹

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

洛谷 P1087 FBI樹(二叉樹)題解

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

洛谷 P1268 樹的重量

題目描述 樹可以用來表示物種之間的進化關係。一棵 進化樹 是乙個帶邊權的樹,其葉節點表示乙個物種,兩個葉節點之間的距離表示兩個物種的差異。現在,乙個重要的問題是,根據物種之間的距離,重構相應的 進化樹 令n 用乙個n上的矩陣m來定義樹t。其中,矩陣m滿足 對於任意的i,j,k,有m i,j m j,...