#include//这道题不就是建两个树 然后顺带判断一下嘛 而树的结构是固定的 //因此只要在结构体里面下功夫就好了 typedef struct node { int k1; int k2; int left; int right; }node; node pon[1008]; int K1[1008]; int kk = 0; int flag; void inorder(int root)//k1 搜索树 { if(root!=-1) { inorder(pon[root].left); K1[kk++] = pon[root].k1; // printf ("%d ",pon[root].k1); inorder(pon[root].right); } } void pdk1() { for (int i = 1;i pon[l].k2 && l!=-1) { flag = 1; return; } pdk2(l); if (pon[root].k2 > pon[r].k2 && r!=-1) { flag = 1; return; } pdk2(r); } int main() { int N; scanf ("%d",&N); int root = (N-1)*N/2; for (int i = 0;i 就是这么自信,直接一遍过,测试都不带测的。
思路不难,就像上面说的一样,建立静态链表,然后再去操作一波,判断是否为二叉树,就用中序遍历,然后看看是否是非递减顺序,判断是否为最小堆,就只需要判断根节点和叶子结点的大小关系即可,然后再加上递归,即可遍历所有数据,前面需要特判一下,如果根结点为-1 就要退出来。设置一个全局变量用来处理就可以了。



