Run ID 作者 问题 语言 测评结果 分数 时间 内存 代码长度 提交时间
135465 陈家宝 对称二叉树 C++ 通过 100 335 MS 11968 KB 910 2024-03-05 17:08:26

Tests(25/25):


#include<bits/stdc++.h> using namespace std; bool flag;//是否对称 int n, ans=1, l[1000001], r[1000001], v[1000001]; int dfs(int x, int y, int s) {//s代表节点数 x,y为正在访问的节点标号 if(x==-1 && y==-1)return 0; if(x==-1 || (y==-1 && x!=y)) {//判断左右对称 flag = 1; return 0; } if(v[x] != v[y]) {//判断权值不对称 flag = 1; return 0; } return dfs(l[x], r[y], 2) + dfs(r[x], l[y], 2) + s;//下面节点数加上面节点数 } int main() { scanf("%d", &n); for(int i=1; i<=n; i++)scanf("%d", v+i); for(int i=1; i<=n; i++)scanf("%d%d", l+i, r+i); for(int i=1; i<=n; i++) { int s = dfs(l[i], r[i], 3);//直接从访问的节点的左孩子和右孩子开始,初始节点为3 if(s>ans && flag==0)ans = s; flag = 0; } printf("%d", ans); return 0; }


测评信息: