题解 | #对称的二叉树#
对称的二叉树
https://www.nowcoder.com/practice/ff05d44dfdb04e1d83bdbdab320efbcb
前言
怒答一波,这道题做过很多遍,然后很多次的忘记,知道考什么,就是不会做,其实我们在训练的过程中忽略了自始至终的思路梳理和代码实现,总是看看答案很会,自己却不会写了,对于我们菜鸡来说,重要的不是写的有多简练,而是知道人脑模拟是怎么实现的,下一步才是思考计算机怎么实现
草稿梳理
如果你做过的题,也不复杂,但是你就是不会,你是睁一只眼闭一只眼呢,还是拿出一张纸,什么都不看,抱着能运行出来就好的心态,乱画30分钟找到思路呢,回忆和思考的过程可能会很痛苦,你唯一能做的就是把所有的线索都罗列出来,问自己几个问题:
是函数自递归呢,还是需要再写个辅助函数递归,怎么判断使用哪种方案本题?
终止条件是什么呢,递归是写在return位置还是body位置?
突破口
突破口就是人是怎么对称的,想象有很多条路线,(左左左,右右右),(左左右,右右左),(左右右, 右左左),想象不同的路径通过红橙黄绿青蓝紫被一一点亮,很帅,很帅!哦哦,有没有启发了,递归原来输入的是一对数,所以需要一个接收两个参数的递归函数
class Solution: def isSymmetrical(self , pRoot: TreeNode) -> bool: # write code here if not pRoot: return True return self.isEqual(pRoot, pRoot) def isEqual(self, node1, node2): if not node1 and not node2: return True if not node1 or not node2: return False return node1.val == node2.val and self.isEqual(node1.left, node2.right) and self.isEqual(node1.right, node2.left)