文章

74

粉丝

0

获赞

98

访问

8.9k

头像
判断二叉树是否对称 题解(两种方式:1.二叉树层次截取遍历 2.层次遍历建树,递归判断):
P1551 东北大学机试题
发布于2025年8月13日 21:20
阅读数 161

方法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;

//...
登录查看完整内容


登录后发布评论

暂无评论,来抢沙发