我們可以把由「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,...