求正解

P5018 [NOIP2018 普及组] 对称二叉树

~~~cpp bool check(int x,int y) { if(x==-1&&y==-1)return true; if(qz[x]!=qz[y])return false; return check(rs[x],ls[y])&&check(ls[x],rs[y]); } ~~~
by ttklwxx @ 2018-11-11 21:51:55


递归 一个节点要满足 它的l和r节点要对称 那么l的l要和r的r对称,l的r要和r的l对称 同时满足就可以了 ``` bool check(int x,int y){ if((t[x].cnt==1)&&(t[y].cnt==1))return t[x].v==t[y].v; if((t[x].cnt!=t[y].cnt)||(t[x].vtot!=t[y].vtot))return false; return check(t[x].l,t[y].r)&check(t[x].r,t[y].l); } ```
by gzh01 @ 2018-11-11 21:52:21


但这是$O(N^2)$啊...
by xhhkwy @ 2018-11-11 21:54:28


@[xhhkwy](/space/show?uid=96592) 你确定吗
by ttklwxx @ 2018-11-11 21:54:58


@[董鲤鱼烧](/space/show?uid=65309) 你还要枚举每一个点啊..
by xhhkwy @ 2018-11-11 22:27:32


听某提高神犇说是马拉车+中序遍历
by 氷芽川四糸乃 @ 2018-11-11 22:54:03


@[xhhkwy](/space/show?uid=96592) 可以证明,这样复杂度为O(nlogn),不信你构一组卡掉试试?
by 1124828077ccj @ 2018-11-14 21:17:35


|