方法1:用层序遍历,一层层检测是否对称
方法2:递归或BFS,对应节点逐个比较,每次比较完一对节点(left,right),新增两对需比较结点
(left.left,right.right),(left.right,right.left),二叉树,倍增的思想
递归
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
if root==None:
return True
return self.helper(root.left,root.right)
def helper(self,Nleft,Nright)->bool:
if(Nleft==None and Nright==None):
return True
if((Nleft==None) ^ (Nright==None)) or (Nleft.val != Nright.val):
return False
return self.helper(Nleft.left,Nright.right) and self.helper(Nleft.right,Nright.left)
非递归,双进双出
# Definition for a binary tree node.
# class TreeNode:
# def __init__(self, val=0, left=None, right=None):
# self.val = val
# self.left = left
# self.right = right
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
if root==None:
return True
queue = [(root.left, root.right)]
while(queue):
(left,right) = queue.pop(0)
if(left==None and right==None): #对称
continue
if((left==None)^(right==None) or (left.val != right.val)): #不对称
return False
queue.append((left.left,right.right))
queue.append((left.right,right.left))
return True