文章
74
粉丝
0
获赞
184
访问
20.5k
方法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;
//...
    
登录后发布评论
暂无评论,来抢沙发