二叉树の狂欢

提交数: 28, 通过率: 35.71%, 平均分: 71.43

题目描述:

给定一棵二叉树,判断其是否是AVL树(平衡二叉树),如果不是AVL树的话,输出"NOT AVL TREE!!!"以及不平衡的结点个数;否则判断其是否是一棵完全二叉树,如果不是完全二叉树的话,输出"NOT COMPLETE TREE!!!" 以及结点个数饱和的最后一层层号(假设根结点层号为1,且第i层的结点个数饱和是指该层的结点个数等于2^(i-1));否则将这棵完全二叉树经过若干次向下调整变成大顶堆,输出"OHHHHH HEAP!!!"以及此过程中将父结点与子结点交换的总次数(每次父结点与子结点交换都算一次,即同一轮向下调整的过程中可能有多次交换)。

输入格式:

每个输入文件中一组数据。
第一行一个正整数N(N<=20),代表二叉树的结点个数(结点编号为1到N)。
第二行按结点编号从小到大的顺序给出N个结点的权值(各结点的权值均小于20且各不相同)。
接下来按结点编号从小到大的顺序给出N行,每行为两个编号,分别代表该结点的左孩子编号和右孩子编号,如果不存在左(右)孩子,那么就用字符'-'代替。数据保证编号在1到N之间。

输出格式:

分两行按题目描述中的字符串和相应统计结果。

样例输入:

5
1 2 3 4 5
2 3
4 5
- -
- -
- -

样例输出:

OHHHHH HEAP!!!
3
时间限制: 1000ms
空间限制: 128MB