FBI樹(二叉樹的遍歷)

2021-10-23 07:47:49 字數 1109 閱讀 2679

題目描述

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

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

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

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

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

[1] 二叉樹:二叉樹是結點的有限集合,這個集合或為空集,或由乙個根結點和兩棵不相交的二叉樹組成。這兩棵不相交的二叉樹分別稱為這個根結點的左子樹和右子樹。

[2] 後序遍歷:後序遍歷是深度優先遍歷二叉樹的一種方法,它的遞迴定義是:先後序遍歷左子樹,再後序遍歷右子樹,最後訪問根。

輸入描述:

第一行是乙個整數n(0 <= n <= 10)

第二行是乙個長度為2n的「01」串。

輸出描述:

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

示例1輸入

310001011

輸出ibfbbbfibfiiiff

備註:對於40%的資料,n <= 2;

對於全部的資料,n<= 10。

題意:略。

題記:直接後序遍歷一次二叉樹即可。

#include

#include

using namespace std;

string s;

intsolve

(int l,

int r)

int sl,sr,mid=

(l+r)

>>1;

sl=solve

(l,mid)

; sr=

solve

(mid+

1,r);if

(sl+sr==0)

else

if(sl+sr==2)

else

}int

main()

FBI樹 字元二叉樹

小記 花了好長時間,這道題主要是考二叉樹的後序遍歷,是個模板,但是不同於一般的根據陣列插入數字構造二叉樹,本題中的二叉樹結點資料是字元,並且是根據字串算出來了。postorder 函式就是原版的後序遍歷函式不需要修改的,不同的是newnode 需要稍加修改,通過呼叫函式tp 來計算當前節點的data...

二叉樹遍歷(樹)

description 樹和二叉樹基本上都有先序 中序 後序 按層遍歷等遍歷順序,給定中序和其它一種遍歷的序列就可以確定一棵二叉樹的結構。假定一棵二叉樹乙個結點用乙個字元描述,現在給出中序和按層遍歷的字串,求該樹的先序遍歷字串。input 輸入檔案flist.in共兩行,每行是由字母組成的字串 一行...

1058FBI《二叉樹,遞迴,後序遍歷》

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