#6101. 满二叉树

满二叉树

满二叉树

题目描述

给定一棵包含 nn 个结点的有根二叉树,结点依次以 1,2,,n1, 2, \ldots, n 编号,根结点编号为 11

对于结点 ii,其左儿子的编号记为 lil_i,右儿子编号记为 rir_i。特别地,如果左儿子不存在则 li=0l_i = 0,如果右儿子不存在则 ri=0r_i = 0

树中每个结点都对应一棵以其为根的子树。请你求出给定有根树的所有 nn 棵子树中,有多少棵子树是满二叉树。

满二叉树是指所有叶子深度均相同,且除叶子外均有两个儿子的二叉树,例如以下三棵二叉树均是满二叉树:

   ()           ()              ()
  /  \         /  \            /  \
 ()  ()      ()   ()         ()   ()
                       /  \  /  \
                     ()  ()()   ()

例如,

  ()
 /  \
()  ()

在上面这棵有 3 个节点的二叉树中,有 3 个子树是满二叉树(包括整个树本身,及所有的单个叶子节点)。

又例如,

   (1)
  /   \
 (2)   (3)
      /   \
    (4)   (5)

在上面这棵有 5 个节点的二叉树中,有 4 个子树是满二叉树(包括节点 3 的子树,以及所有单个叶子节点)。

输入格式

第一行,一个正整数 nn,表示有根二叉树结点数量。

接下来 nn 行,每行两个非负整数 li,ril_i, r_i,表示结点 ii 的左儿子编号和右儿子编号,整数之间以空格分隔。

输出格式

输出一行,一个整数,表示所有子树中满二叉树的数量。

样例输入 #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 个。

数据范围

对于 40%40\% 的测试点,保证 1n5001 \le n \le 500

对于所有测试点,保证 1n1051 \le n \le 10^5

知识点与难度

本题涉及的知识点从属于 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 回归