题目描述:
给定一个二叉树,检查它是否是镜像对称的。
例如,二叉树 [1,2,2,3,4,4,3]
是对称的。
1
/ \
2 2
/ \ / \
3 4 4 3
但是下面这个 [1,2,2,null,3,null,3]
则不是镜像对称的:
1
/ \
2 2
\ \
3 3
解题思路1: 递归解法
代码1:
class Solution {
public:
bool isSymmetric(TreeNode* root) {
if(!root) return true;
return dfs(root -> left,root -> right);
}
bool dfs(TreeNode* p, TreeNode* q){
if (!p || !q) return (!p) && (!q);
return p -> val == q -> val && dfs(p -> left, q -> right) && dfs(p -> right, q -> left);
}
};
解题思路2:
代码2:
class Solution(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if not root:
return True
def dfs(left,right):
# 递归的终止条件是两个节点都为空
# 或者两个节点中有一个为空
# 或者两个节点的值不相等
if not (left or right):
return True
if not (left and right):
return False
if left.val!=right.val:
return False
return dfs(left.left,right.right) and dfs(left.right,right.left)
# 用递归函数,比较左节点,右节点
return dfs(root.left,root.right)
题目来源: