因为这道题只要求最大的节点数量,所以我们只用枚举“根节点”的位置,然后判断是否对称,如果对称,统计这棵子树的节点数并记录 ans 。 cnt 与 main 函数过于简单故不在此处展开赘述,单独看看 same 函数——判断是否对称。我们一次需要两个位置来判断对称,而这两棵子树对称,当且仅当它们的儿子们全部对称,便可以从此处向下递归。递归的两边就是同时向内收 (ls[RootR],rs[RootL]) 或同时向外放 (ls[RootL],rs[RootR]),如果不这样的话遍历的两个位置本身就不对称。基于此,我们再来看实现。
实现
在代码实现方面,存树我们使用两个列表 ls 与 rs,这里开成了一个结构体,除此之外,我们还需要一个 id 用于存储树上节点的 value 。其余部分和思路部分所论述的一样。