题目大意:大写字母会作为其前两个字母的父节点,并替换前两个字符,最终建立二叉树。输出时按照从底层到高层,从左子节点到右子节点。
解题方法:用stack建立二叉树,然后用queue排列输出顺序。
代码:
#include<cstdio>
#include<iostream>
#include<string>
#include<stack>
#include<queue>
#define N 11000
using namespace std;
struct node{
char c;
node * left,*right;
};
queue<node*> que;
stack<node*> stac;
node nodes[10500];
void tree(string str){
for(int i=0;str[i]!=0;i++){
if(str[i]>='a'&&str[i]<='z'){
node * nod=&nodes[i];
nod->left=NULL;
nod->right=NULL;
nod->c=str[i];
stac.push(nod);
}
else{
node * nod=&nodes[i];
nod->right=stac.top();stac.pop();
nod->left=stac.top();stac.pop();