文章
67
粉丝
207
获赞
29
访问
36.4k
#include <iostream>
#include<string.h>
#include <math.h>
using namespace std;
int main(){
char a[1005];
for(int i=0;i<1005;i++)
a[i]=0;
gets(a);
int len=strlen(a);
int high=0;
for(int i=1;;i++){
if((len+1)<=pow(2.0,i))
{
high=i;
break;
}
}
//high 就是二叉树的高度================
char b[10005],c[10005],d[10005];
for(int i=0;i<10005;i++){
b[i]=0;
c[i]=0;
d[i]=0;
}
// 把0去掉这样好算一点================================
for(int i=0;i<len;i++)
b[i+1]=a[i];
//最大范围保证二叉树,空就给#,多一行#不影响对称性
for(int i=1;i<pow(2.0,(high+1));i++)
{
if(b[i]==0)
b[i]='#';
}
// 左子树=============================================
int x=0;
for(int i=1;i<high;i++){
for(int j=pow(2.0,i);j<(pow(2.0,i)+pow(2.0,i)/2);j++){
c[x++]=b[j];
}
}
// 右子树==============================================
//注意这里是先输入大的=============
int y=0;
for(int i=1;i<high;i++){
for(int j=(pow(2.0,i)*2)-1;j>=(pow(2.0,i...
登录后发布评论
二刷了,
丢了这个条件,结果只有77%