本文主要是介绍22.11 二叉树输出(btout),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
题目描述
树的凹入表示法主要用于树的屏幕或打印输出,其表示的基本思想是兄弟间等长,一个结点要不小于其子结点的长度。二叉树也可以这样表示,假设叶结点的长度为1,一个非叶结点的长并等于它的左右子树的长度之和。 一棵二叉树的一个结点用一个字母表示(无重复),输出时从根结点开始: 每行输出若干个结点字符(相同字符的个数等于该结点长度),如果该结点有左子树就递归输出左子树;如果该结点有右子树就递归输出右子树。 假定一棵二叉树一个结点用一个字符描述,现在给出先序和中序遍历的字符串,用树的凹入表示法输出该二叉树。
输入格式
输入文件btout.in共两行,每行是由字母组成的字符串(一行的每个字符都是唯一的),分别表示二叉树的先序遍历和中序遍历的序列。
输出格式
输出文件btout.out的行数等于该树的结点数,每行的字母相同。
输入样例
ABCDEFG
CBDAFEG
输出样例
AAAA
BB
C
D
EE
F
G
#include <bits/stdc++.h>using namespace std;string s1, s2;
int i = -1;
int a[100];int tree(int l, int r){int k = ++i;int tree_ = 0;int mid = s2.find(s1[k]);if(mid != l){tree_ += tree(l, mid - 1);}if(mid != r){tree_ += tree(mid + 1, r);}if(l == r){tree_ = 1;}a[s1[k]] = tree_;return tree_;
}int main(){getline(cin, s1);getline(cin, s2);tree(0, s2.size() - 1);for(int i = 0; i < s1.size(); i++){for(int j = 1; j <= a[int(s1[i])]; j++){printf("%c", s1[i]);}printf("\n");}return 0;
}
这篇关于22.11 二叉树输出(btout)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!