文章
74
粉丝
0
获赞
98
访问
8.9k
方法1:无需建树
#include<bits/stdc++.h>
using namespace std;
int main(){
string s;
while(cin >> s){
int len = s.length();
int depth = 1; // 当前层数
bool flag = true; // 此层是否对称
while(len >= pow(2, depth) - 1){
// 截取单层
int level_len = pow(2, depth - 1);
string level = s.substr(pow(2, depth - 1) - 1, level_len);
// cout << level << endl;
// 对称比较节点
for(int i = 0; i < level.size()/2; i ++){
if((level[i] != '#' && level[level_len - i - 1] == '#')||
(level[i] == '#' && level[level_len - i - 1] != '#')){
flag = false;
break;
}
}
if(!flag) break;
depth ++;
}
if(!flag) cout << "NO" << endl;
else cout << "YES" << endl;
}
return 0;
}
方法2:按照层次遍历建树
#include<bits/stdc++.h>
using namespace std;
typedef struct node{
char data;
struct node *lchild, *rchild;
}*BitTree;
//...
登录后发布评论
暂无评论,来抢沙发