返回首页 返回题库

完全二叉树

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

题目描述

题面描述

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

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

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

输入格式

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

接下来 行,每行两个正整数 ,表示结点 的左儿子编号和右儿子编号。

输出格式

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

样例1

输入:

4
2 3
4 0
0 0
0 0

输出:

4

样例2

输入:

4
2 3
0 0
4 0
0 0

输出:

3

数据范围

对于 的测试点,保证 。

对于所有测试点,保证 。

时间限制

1.0 s

内存限制

512.0 MB

💡 查看提示(先自己想一想再看)
考察知识点:树的深度优先遍历、完全二叉树的性质、动态规划。解题思路:通过DFS遍历每个结点,记录以当前结点为根的子树的最小高度、最大高度以及是否为完全二叉树。完全二叉树的判定条件:左右子树都是完全二叉树,左子树的最小高度大于等于右子树的最大高度,且子树的最小高度与最大高度相差不超过1。注意空结点的初始化处理,避免越界访问。
⚙ 开始做这道题 0 人做过 · 0 收藏 · 6 浏览

讨论(0)