国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

算法訓練 FBI樹 藍橋杯

2019-11-08 01:47:29
字體:
來源:轉載
供稿:網友
問題描述  我們可以把由“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樹的后序遍歷序列。樣例輸入310001011樣例輸出IBFBBBFIBFIIIFF數據規模和約定  對于40%的數據,N <= 2;  對于全部的數據,N <= 10。  注:  [1] 二叉樹:二叉樹是結點的有限集合,這個集合或為空集,或由一個根結點和兩棵不相交的二叉樹組成。這兩棵不相交的二叉樹分別稱為這個根結點的左子樹和右子樹。  [2] 后序遍歷:后序遍歷是深度優先遍歷二叉樹的一種方法,它的遞歸定義是:先后序遍歷左子樹,再后序遍歷右子樹,最后訪問根。二叉樹入門,練習如何建樹(節點就行),后序先序中序遍歷(遞歸就行)
#include <cstring>#include <cstdio>#include <iostream>using namespace std;#define max(a,b) ((a>b)?(a):(b))int s[2000]={0};struct Node{bool have_value;char v;Node *left,*right;Node():have_value(false),left(NULL),right(NULL){};};Node *newNode(){return new Node();}void addNode(Node *root,int top,int bottom){int sum=0;for(int i=top;i<=bottom;i++)sum+=s[i];if(sum==bottom-top+1)    {root->v='I';}else if(sum==0)     {root->v='B';}else     {root->v='F';}root->have_value=true;if(top<bottom){root->left=newNode();root->right=newNode();addNode(root->left,top,(top+bottom)/2);addNode(root->right,(top+bottom)/2+1,bottom);}else{root->left=NULL;root->right=NULL;}}void postOrder(Node *root){if(root==NULL)return;postOrder(root->left);postOrder(root->right);PRintf("%c",root->v);}int main(){int i=1,N;char c;Node *root;scanf("%d",&N);getchar();while((c=getchar())!='/n')s[i++]=c-'0';root=newNode();addNode(root,1,i-1);postOrder(root);return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 新昌县| 北票市| 广水市| 达孜县| 黔江区| 洞头县| 五常市| 徐闻县| 五常市| 嘉义市| 江永县| 灌阳县| 永川市| 宁津县| 陕西省| 城固县| 望谟县| 田林县| 静宁县| 新丰县| 望江县| 平凉市| 青州市| 紫阳县| 长白| 华安县| 平罗县| 上虞市| 如皋市| 偃师市| 怀远县| 南乐县| 磐石市| 辉县市| 正蓝旗| 莱州市| 临洮县| 桃园县| 重庆市| 滁州市| 宁津县|