【题解】对称二叉树
数的同构
给定两棵树T1和T2。如果T1可以通过若干次左右孩子互换就变成T2,则我们称两棵树是“同构”的。例如图1给出的两棵树就是同构的,因为我们把其中一棵树的结点A、B、G的左右孩子互换后,就得到另外一棵树。而图2就不是同构的。
一般情况(树hash):
https://blog.csdn.net/dpppbr/article/details/52915576
递归判断(用于二叉树):
https://www.cnblogs.com/jingjing1234/p/10822040.html
回归本题
其实就是多考虑了一下节点的顺序问题而已。
法一.
枚举根节点,递归判断是否对称。
O
(
n
l
o
g
n
)
O(nlogn)
O(nlogn),n是枚举,logn是check函数。
法二.
显然可以直接hash树的形态,即分中序遍历1(先进左子树)和中序遍历2(先进右子树)记录hash值,对于每一个节点,若是此节点的左儿子的中序遍历1的hash值等于右儿子的中续遍历2的hash值,说明这个点为根的树是对称的。
由于要考虑顺序,所以这里直接乘系数,不平方。
h
a
s
h
[
x
]
=
h
a
s
h
[
l
[
x
]
]
∗
V
1
+
c
o
s
t
[
x
]
∗
V
2
+
h
a
s
h
[
r
[
x
]
]
∗
V
3
;
hash[x]=hash[l[x]]*V1+cost[x]*V2+hash[r[x]]*V3;
hash[x]=hash[l[x]]∗V1+cost[x]∗V2+hash[r[x]]∗V3;
H
a
s
h
[
x
]
=
H
a
s
h
[
r
[
x
]
]
∗
V
1
+
c
o
s
t
[
x
]
∗
V
2
+
H
a
s
h
[
l
[
x
]
]
∗
V
3
;
Hash[x]=Hash[r[x]]*V1+cost[x]*V2+Hash[l[x]]*V3;
Hash[x]=Hash[r[x]]∗V1+cost[x]∗V2+Hash[l[x]]∗V3;
实测88pts,运气好的话,像下面这个代码,可以ac。这个方法不建议用。
其实我也没打出来
__EOF__

本文链接:https://www.cnblogs.com/cqbzly/p/17530401.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
· DeepSeek 开源周回顾「GitHub 热点速览」