二叉树输出(信息学奥赛一本通-T1366)
生活随笔
收集整理的這篇文章主要介紹了
二叉树输出(信息学奥赛一本通-T1366)
小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
【題目描述】
樹的凹入表示法主要用于樹的屏幕或打印輸出,其表示的基本思想是兄弟間等長,一個(gè)結(jié)點(diǎn)的長度要不小于其子結(jié)點(diǎn)的長度。二叉樹也可以這樣表示,假設(shè)葉結(jié)點(diǎn)的長度為1,一個(gè)非葉結(jié)點(diǎn)的長度等于它的左右子樹的長度之和。
一棵二叉樹的一個(gè)結(jié)點(diǎn)用一個(gè)字母表示(無重復(fù)),輸出時(shí)從根結(jié)點(diǎn)開始:
每行輸出若干個(gè)結(jié)點(diǎn)字符(相同字符的個(gè)數(shù)等于該結(jié)點(diǎn)長度),如果該結(jié)點(diǎn)有左子樹就遞歸輸出左子樹;如果該結(jié)點(diǎn)有右子樹就遞歸輸出右子樹。
假定一棵二叉樹一個(gè)結(jié)點(diǎn)用一個(gè)字符描述,現(xiàn)在給出先序和中序遍歷的字符串,用樹的凹入表示法輸出該二叉樹。
【輸入】
兩行,每行是由字母組成的字符串(一行的每個(gè)字符都是唯一的),分別表示二叉樹的先序遍歷和中序遍歷的序列。
【輸出】
行數(shù)等于該樹的結(jié)點(diǎn)數(shù),每行的字母相同。
【輸入樣例】
ABCDEFG
CBDAFEG
【輸出樣例】
AAAA
BB
C
D
EE
F
G
【源程序】
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #include<string> #include<cstdlib> #include<queue> #include<vector> #define INF 0x3f3f3f3f #define PI acos(-1.0) #define N 100001 #define MOD 123 #define E 1e-6 using namespace std; char a[N],b[N],c[N]; int calculate(int left1,int right1,int left2,int right2) {if(left1==right1){c[left1]=1;return c[left1];}int i;for(i=left2;i<=right2;i++)if(a[left1]==b[i])break;if(left2<i)c[left1]+=calculate(left1+1,(i-1-left2)+(left1+1),left2,i-1);if(i<right2)c[left1]+=calculate(right1-(right2-(i+1)),right1,i+1,right2);return c[left1]; } int main() {cin>>a>>b;int lena=strlen(a);int lenb=strlen(b);calculate(0,lena-1,0,lenb-1);for(int i=0;i<lena;i++){for(int j=1;j<=c[i];j++)cout<<a[i];cout<<endl;}return 0; }?
總結(jié)
以上是生活随笔為你收集整理的二叉树输出(信息学奥赛一本通-T1366)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 棋盘问题(信息学奥赛一本通-T1217)
- 下一篇: 统计字符数(信息学奥赛一本通-T1187