DFS 80分求调教

P5018 [NOIP2018 普及组] 对称二叉树

```cpp #include<bits/stdc++.h> using namespace std; struct node { int v,l,r; }tree[1000005]; int n,mmax=1; bool check(long long i,long long j) {//dfs check if(i==-1&&j==-1)return true; else if(i==-1||j==-1)return false; else if(tree[i].v!=tree[j].v)return false; else return check(tree[i].l,tree[j].r)&&check(tree[i].r,tree[j].l); } int palindrome_tree(long long ind) { return ind==-1? 0:palindrome_tree(tree[ind].l)+palindrome_tree(tree[ind].r)+1; } int main() { cin>>n; for(int i=1;i<=n;i++)cin>>tree[i].v; for(int i=1;i<=n;i++)cin>>tree[i].l>>tree[i].r; for(int i=1;i<=n;i++) { if(check(i,i))mmax=max(mmax,palindrome_tree(i)); } cout<<mmax; return 0; } ```
by tuohai @ 2023-10-04 14:27:16


|