题目
描述
给定一棵二叉树,判断其是否是自身的镜像(即:是否对称)。
数据范围:节点数满足
0≤n≤1000,节点上的值满足
∣val∣≤1000
要求:空间复杂度 O(n),时间复杂度 O(n)
备注:
你可以用递归和迭代两种方法解决这个问题
思路
用递归来解决,判断左子树的根节点和右子树的根节点值是不是相同,判断左子树的右子树和右子树的左子树是不是相同,同时左子树的左子树和右子树的右子树是不是相同。
代码
python版本:
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
#
# 代码中的类名、方法名、参数名已经指定,请勿修改,直接返回方法规定的值即可
#
#
# @param pRoot TreeNode类
# @return bool布尔型
#
class Solution:
# inorderleft_res = []
# inorderright_res = []
def isSymmetrical(self , pRoot: TreeNode) -> bool:
# write code here
if(pRoot==None):
return True
# 递归
return self.ismirror(pRoot.left, pRoot.right)
def ismirror(self, L: TreeNode, R: TreeNode):
if L==None and R==None: return True
if L==None or R==None: return False
if L.val != R.val: return False
return self.ismirror(L.left, R.right) and self.ismirror(L.right, R.left)