这个代码为啥能过啊/yiw
查看原帖
这个代码为啥能过啊/yiw
574944
Micnation_AFO楼主2022/10/6 23:19
#include <bits/stdc++.h>
using namespace std;
const int N = 1000005;
int a[N], l[N], r[N];
int n;
int ans = 1;
bool flag;
void check(int x, int y);// 检测是否是对称二叉树
int calc(int k);// 以k为根节点,返回这颗子树所有节点之和

void check(int x, int y) {	
	if(x==-1 && y==-1)
	    return;  
	if(x==-1 || y==-1 || a[x]!=a[y]){
	    flag = false;
	    return;
	} 
	check(l[x], r[y]);//判断左子树
	check(r[x], l[y]);//判断右子树
}
int calc(int k){
    int sum = 0;
if(l[k]!=-1)
sum += calc(l[k]);
if(r[k] != -1)
sum += calc(r[k]);
    return 1 + sum;
}


int main( )  {
    cin>>n;
    for(int i=1;i<=n;i++) cin>>a[i];			
    for(int i=1;i<=n;i++){
        cin>>l[i];
        cin>>r[i];
    }
    for(int i=1;i<=n;i++) {
        if(l[i]!=-1 && r[i]!=-1 && a[l[i]]==a[r[i]]){
           flag = true;    // 先假定以i为根节点,其子树是对称二叉树
           check(l[i], r[i]);
           if(flag) 
               ans = max(ans, calc(i));
       } 
    } 
    cout << ans;
    return 0;
}



这是我们老师给的代码,但是我认为会 TLE,没想到一提交却 AC 了。请问这个代码的时间复杂度大概是多少?

2022/10/6 23:19
加载中...