返回首页 返回题库

满二叉树

C++ 中等 GESP六级真题 #二叉树#深度优先搜索#树的遍历#动态规划

题目描述

题面描述

给定一棵包含 个结点的有根二叉树,结点依次以 编号,根结点编号为 1。

对于结点 ,其左儿子的编号记为 ,右儿子编号记为 。特别地,如果左儿子不存在则 ,如果右儿子不存在则 。

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

满二叉树是指所有叶子深度均相同,且除叶子外均有两个儿子的二叉树。

例如以下三棵二叉树均是满二叉树:

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

输入格式

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

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

输出格式

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

样例1

输入:

4
2 3
4 0
0 0
0 0

输出:

2

样例2

输入:

3
2 3
0 0
0 0

输出:

3

数据范围

对于 的测试点,保证 。

对于所有测试点,保证 。

时间限制

1.0 s

内存限制

512.0 MB

💡 查看提示(先自己想一想再看)
本题考察二叉树的深度优先遍历,需要同时记录每个节点为根的子树是否是满二叉树,以及子树的高度。对于每个节点,只有当左右子树都是满二叉树且左右子树高度相同时,当前节点的子树才是满二叉树。注意空节点的处理,空节点可以认为是高度为0的满二叉树。
⚙ 开始做这道题 0 人做过 · 0 收藏 · 7 浏览

讨论(0)