A7436 | [GESP202606 六级]满二叉树
时间限制1s
内存限制512MB
通过 / 提交0/0
题目描述
给定一棵包含 $n$ 个结点的有根二叉树,结点依次以 $1 \sim n$ 编号,根结点编号为 $1$。
对于结点 $i$,其左儿子的编号记为 $l_i$,右儿子编号记为 $r_i$。特别地,如果左儿子不存在则 $l_i=0$,如果右儿子不存在则 $r_i=0$。
树中每个结点都对应一棵以其为根的子树。请你求出给定有根树的所有 $n$ 棵子树中,有多少棵子树是满二叉树。
满二叉树是指所有叶子深度均相同,且除叶子外均有两个儿子的二叉树,例如以下三棵二叉树均是满二叉树:
例如,
在上面这棵有 $3$ 个节点的二叉树中,有 $3$ 个子树是满二叉树(包括整个树本身,及所有的单个叶子节点);
又例如,
在上面这棵有 $5$ 个节点的二叉树中,有 $4$ 个子树是满二叉树(包括节点 $3$ 的子树,以及所有单个叶子节点)。
对于结点 $i$,其左儿子的编号记为 $l_i$,右儿子编号记为 $r_i$。特别地,如果左儿子不存在则 $l_i=0$,如果右儿子不存在则 $r_i=0$。
树中每个结点都对应一棵以其为根的子树。请你求出给定有根树的所有 $n$ 棵子树中,有多少棵子树是满二叉树。
满二叉树是指所有叶子深度均相同,且除叶子外均有两个儿子的二叉树,例如以下三棵二叉树均是满二叉树:
() () ()
/ \ / \
() () () ()
/ \ / \
() () () ()例如,
()
/ \
() ()在上面这棵有 $3$ 个节点的二叉树中,有 $3$ 个子树是满二叉树(包括整个树本身,及所有的单个叶子节点);
又例如,
(1)
/ \
(2) (3)
/ \
(4) (5)在上面这棵有 $5$ 个节点的二叉树中,有 $4$ 个子树是满二叉树(包括节点 $3$ 的子树,以及所有单个叶子节点)。
输入格式
第一行,一个正整数 $n$,表示有根二叉树结点数量。
接下来 $n$ 行,每行两个非负整数 $l_i, r_i$,表示结点 $i$ 的左儿子编号和右儿子编号,整数之间以空格分隔。
接下来 $n$ 行,每行两个非负整数 $l_i, r_i$,表示结点 $i$ 的左儿子编号和右儿子编号,整数之间以空格分隔。
输出格式
输出一行,一个整数,表示所有子树中满二叉树的数量。
输入输出样例
输入 #1
4 2 3 4 0 0 0 0 0
输出 #1
2
输入 #2
3 2 3 0 0 0 0
输出 #2
3
数据范围
对于 $30\%$ 的测试点,保证 $n \le 1000$。
对于所有测试点,保证 $1 \le n \le 10^5$。
C++ 编辑器
输入
输出
可保存默认模板;新题优先使用已保存模板。
当前快捷键仅展示,暂不支持修改。
- 撤销
Ctrl / ⌘ + Z - 重做
Ctrl / ⌘ + Y - 查找
Ctrl / ⌘ + F - 全选
Ctrl / ⌘ + A - 复制
Ctrl / ⌘ + C - 剪切
Ctrl / ⌘ + X - 粘贴
Ctrl / ⌘ + V - 自动排版
工具栏排版按钮 - 草稿保存
编辑时自动保存到本机
历史
提交记录
状态说明时间源码
AI
作答助手
你好,我是作答助手。可以问思路、复杂度、样例含义或代码报错原因;不会直接给出完整 AC 代码。
确定要清空代码吗?