题目
给你一个二叉树的根节点 root , 检查它是否轴对称。
代码
方法一:递归
bash
# 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: Optional[TreeNode]) -> bool:
def check(left,right):
if left is None and right is None:
return True
if left is None or right is None:
return False
if left.val!=right.val:
return False
out=check(left.left,right.right)
inner=check(left.right,right.left)
return out and inner
return check(root.left,root.right) if root else True
方法二:队迭代
这里用的两个队分别存放根节点的左右两个子树的节点,当然也可以只使用一个队
bash
# 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: Optional[TreeNode]) -> bool:
if root is None:
return True
queue1=deque([root.left])
queue2=deque([root.right])
while queue1 and queue2:
n=len(queue1)
for _ in range(n):
node1=queue1.popleft()
node2=queue2.popleft()
if not node1 and not node2:
continue
if not node1 or not node2:
return False
if node1.val != node2.val :
return False
queue1.append(node1.left)
queue1.append(node1.right)
queue2.append(node2.right)
queue2.append(node2.left)
return True
只使用一个队的方法:
bash
# 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: Optional[TreeNode]) -> bool:
if root is None:
return True
queue=deque()
queue.append(root.left)
queue.append(root.right)
while queue:
left=queue.popleft()
right=queue.popleft()
if not left and not right:
continue
if not left or not right:
return False
if left.val !=right.val:
return False
queue.append(left.left)
queue.append(right.right)
queue.append(left.right)
queue.append(right.left)
return True