题目链接
https://pintia.cn/problem-sets/994805342720868352/problems/1071785408849047552
题解
题目要求
堆(大顶堆或小顶堆)中,任意一条从根结点到叶子结点的路径上的值一定是非递增序列或者非递减序列。
现在给定一个完全二叉树,请检查它的每一条路径,判断这棵树是不是堆。
输入
- N:正整数,大于1,不超过1000,树中结点的数量
- N个结点的值(互异):都是int范围内,按照层次遍历的顺序给出
输出
对于每棵树
先输出所有从根结点到叶子结点的路径,每条路径占一行,数字间用一个空格间隔,首尾不能有多余空格
输出顺序:对于每个结点,其右子树的所有路径要先于其左子树的所有路径输出
输出这颗树是大顶堆还是小顶堆,或者它不是堆
思路
- 利用完全二叉树的性质,将结点记录到一维数组中
- 使用DFS,使用vecotr记录当前遍历到的所有结点(即路径),如果当前结点是叶子结点则输出这条路径,否则先遍历右子树再遍历左子树
- 在DFS过程中判断是否违背大小顶堆性质
- 最后输出该树是否是大小顶堆
代码
1 | // Problem: PAT Advanced 1155 |
作者:@臭咸鱼
转载请注明出处:https://www.cnblogs.com/chouxianyu/
欢迎讨论和交流!