对称二叉树求助

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

然而我觉得要加一个树Hash判断形状吧
by bellmanford @ 2019-11-13 08:38:05


我看了一下,形状的话我是先dfs一下这颗树得到每个点的左孩子数和右孩子数,要是左右孩子数不相等要把半径设成0; ```cpp for(int i=1;i<=tot;i++){ if(i<maxright){ hw[i]=min(hw[(mid<<1)-i],hw[mid]+mid-i); if(tr[tr[pre[i]].ls].size==tr[tr[pre[i]].rs].size&&hw[i]*2+1>=tr[pre[i]].size) ans=max(ans,tr[pre[i]].size); } else hw[i]=0; while(a[i+hw[i]+1]==a[i-hw[i]-1]){ ++hw[i]; if(tr[tr[pre[i]].ls].size==tr[tr[pre[i]].rs].size&&hw[i]*2+1>=tr[pre[i]].size) ans=max(ans,tr[pre[i]].size); }//到这里我都和你差不多,回文加速的部分不用改 if(hw[i]+i>maxright){ maxright=hw[i]+i; mid=i; } //但是我这里加了个特判要是左孩子数和右孩子数不相等或者hw[i]的大小比左孩子个数少 //那么这个树不是对称的,hw[i]应该修改成0 // if(a[i].lsoncount!=a[i].rsoncount||hw[i]<a[i].lsoncount) // hw[i]=0; //像这样 } ```
by Schwarzkopf_Henkal @ 2019-11-13 08:48:16


@[bellmanford](/user/116015) 要是左孩子数和右孩子树相等,每个节点的层次和值都呈现回文,那么这个树一定是回文的
by Schwarzkopf_Henkal @ 2019-11-13 08:49:28


啊是对称
by Schwarzkopf_Henkal @ 2019-11-13 08:49:43


还有@[初音美如画](/user/207667) 你说谁逼呢我现在坐在你对面还有你被JC签名被改了都不知道
by Schwarzkopf_Henkal @ 2019-11-13 08:51:28


@[Schwarzkopf_Henkal](/user/251723) 谢谢
by bellmanford @ 2019-11-13 09:07:32


@[bellmanford](/user/116015) qwq
by Schwarzkopf_Henkal @ 2019-11-13 09:09:53


@[Schwarzkopf_Henkal](/user/251723) [HELP](https://www.luogu.org/discuss/show/167539)
by bellmanford @ 2019-11-13 09:11:57


上一页 |