ACGO首发此题题解
2026-08-14 21:03:06
发布于:浙江
9阅读
0回复
0点赞
由于作者是个蒟蒻,做题还要切洛谷于是作者很不爽,立志要写出此题题解
经过114514年的研究,终于写出了题解,制作不已,给作者点个赞喵~
首先,我们不跟萧山金城路校区的某人教的一样,直接两数组存储左右子树,为什么?装逼!
题意分析
要求统计“满二叉树”的子树个数。那什么是满二叉树?提炼一下就是三点:
左子树必须是满二叉树。
右子树必须是满二叉树。
左子树的深度 = 右子树的深度。
仔细品会发现:父节点的状态,完全依赖于左右儿子节点的状态。 这就是妥妥的自底向上的状态转移
那既然要先知道儿子的信息,再去推断88的信息,遍历树的时候,就是后序遍历了
(此段来源于洛谷。↑)
有了思路,我们就可以无脑往两边扩,得出代码:
AC code
#include <bits/stdc++.h>
using namespace std;
int n,ans=0;
int l[100010];
int r[100010];
int dfs(int u){
if(u==0){return 0;}
int hl = dfs(l[u]);
int hr = dfs(r[u]);
if(hl==hr&&hl!=-1&&hr!=-1){
ans++;
return hl+1;
}
else
return -1;
}
int main(){
cin>>n;
for(int i=1;i<=n;i++){
cin>>l[i]>>r[i];
}
dfs(1);
cout<<ans;
return 0;
}
全部评论 1
dddds
1周前 来自 浙江
0







有帮助,赞一个