并查集用多了。。。第一时间想到的是并查集却没有想到静态数组,这是一个比较大的失误;这道题的关键在于如下几个点:1.如何保存输入的树;2.如何寻找根节点;3.如何完成树的反转;1,2两点都很容易解决,可能比较难一点的是第三点;其实第三点也不难,我们观察一下就可以知道,树的反转本身就是在后序遍历的过程中对左右子树进行对换,就可以很轻松的得到反转后的树;总体代码如下所示:
#include#include #include #include using namespace std;const int maxn=110;struct node{ int lchild; int rchild;}Node[maxn];bool noRoot[maxn]={false};int n,num=0;void print(int id){ printf("%d",id); num++; if(num