题意
如题所示
思路
- 分类讨论
- 1?? 左右子树都为空是对称的
- 2?? 只有左子树或者右子树的时候不是对称的
- 3?? 对称位置上的值要相等,而且它的左孩子和右孩子也要是对称的
- 有了上面的分类讨论,就可以根据这个直接写代码了
Java 代码
class Solution {
public boolean judgeSymmetric(TreeNode r1, TreeNode r2) {
if(r1 == null && r2 == null) return true;
if(r1 == null && r2 != null) return false;
if(r1 != null && r2 == null) return false;
return r1.val == r2.val && judgeSymmetric(r1.left, r2.right) && judgeSymmetric(r1.right, r2.left);
}
public boolean isSymmetric(TreeNode root) {
return judgeSymmetric(root, root);
}
}
Python 代码
class Solution:
def judge(self, root1, root2):
if not root1 and not root2:
return True
if not root1 or not root2:
return False
return root1.val == root2.val and self.judge(root1.left, root2.right) and self.judge(root1.right, root2.left)
def isSymmetric(self, root: TreeNode) -> bool:
return self.judge(root, root)