#6125. 满二叉树
满二叉树
满二叉树
题目描述
给定一棵包含 个结点的有根二叉树,结点依次以 编号,根结点编号为 。
对于结点 ,其左儿子的编号记为 ,右儿子编号记为 。特别地,如果左儿子不存在则 ,如果右儿子不存在则 。
树中每个结点都对应一棵以其为根的子树。请你求出给定有根树的所有 棵子树中,有多少棵子树是满二叉树。
满二叉树是指所有叶子深度均相同,且除叶子外均有两个儿子的二叉树,例如以下三棵二叉树均是满二叉树:
() () ()
/ \ / \ / \
() () () () () ()
/ \ / \
() ()() ()
例如,
()
/ \
() ()
在上面这棵有 3 个节点的二叉树中,有 3 个子树是满二叉树(包括整个树本身,及所有的单个叶子节点)。
又例如,
(1)
/ \
(2) (3)
/ \
(4) (5)
在上面这棵有 5 个节点的二叉树中,有 4 个子树是满二叉树(包括节点 3 的子树,以及所有单个叶子节点)。
输入格式
第一行,一个正整数 ,表示有根二叉树结点数量。
接下来 行,每行两个非负整数 ,表示结点 的左儿子编号和右儿子编号,整数之间以空格分隔。
输出格式
输出一行,一个整数,表示所有子树中满二叉树的数量。
样例输入 #1
4
2 3
4 0
0 0
0 0
样例输出 #1
2
样例输入 #2
3
2 3
0 0
0 0
样例输出 #2
3
样例解释
样例 1:树为 1->{2,3}, 2->{4,0}, 3->{0,0}, 4->{0,0}。满二叉树子树有:节点 3(叶子)、节点 4(叶子),共 2 个。
样例 2:树为 1->{2,3}, 2->{0,0}, 3->{0,0}。满二叉树子树有:节点 1(两个叶子儿子,深度均为 1)、节点 2、节点 3,共 3 个。
数据范围
对于 的测试点,保证 。
对于所有测试点,保证 。
知识点与难度
本题涉及的知识点从属于 GESP 6级(树、DFS、动态规划),难度等级:⭐⭐⭐。
测试点分布
| Subtask | 分值 | 测试点编号 | 说明 |
|---|---|---|---|
| 0 | 10 | 1~2 | 样例 |
| 1 | 20 | 3~8 | 小规模 N≤5 / 特殊: 单节点 / 特殊: 链 / 特殊: 完全满二叉树 |
| 2 | 15 | 9~11 | Hack: N=1 / Hack: 全部叶子 / Hack: 左/右缺失导致非满 |
| 3 | 30 | 12~20 | 中规模 N≈100~5000 / 大规模 N≈1e5 压力 |
| 4 | 25 | 21~25 | 随机 N=1~1e5 回归 |