文章

49

粉丝

140

获赞

27

访问

17.1k

头像
判断二叉树是否对称 题解:新手方法 易于理解
P1551 东北大学机试题
发布于2024年2月29日 12:00
阅读数 519

#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...
登录查看完整内容


登录后发布评论

1 条评论
孙某人
2024年3月17日 21:33

二刷了,

丢了这个条件,结果只有77%

  1. //最大范围保证二叉树,空就给#,多一行#不影响对称性
  2. for(int i=1;i<pow(2.0,(high+1));i++)
  3. {
  4. if(b[i]==0)
  5. b[i]='#';
  6. }

赞(0)