101 对称二叉树
给你一个二叉树的根节点 root
, 检查它是否轴对称。
输入:root = [1,2,2,3,4,4,3]
输出:true
输入:root = [1,2,2,null,3,null,3]
输出:false
分为四种情况,左右子树都为空:TRUE;左空右不空,左不空右空:FALSE;左右不空但值不同:FALSE。使用队列,依次把左右子树的元素放进队列,再每次都弹出两个值,进行对比。
# 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 not root:
# return True
# from collections import deque
# que = deque()
# que.append(root.left)
# que.append(root.right)
# while que:
# leftnode = que.popleft()
# rightnode = que.popleft()
# if not leftnode and not rightnode:
# continue
# if not leftnode or not rightnode or leftnode.val != rightnode.val:
# return False
# que.append(leftnode.left)
# que.append(rightnode.right)
# que.append(leftnode.right)
# que.append(rightnode.left)
# return True
# 递归
def isSame(left, right):
if left == None and right == None:
return True
elif left != None and right == None:
return False
elif left == None and right != None:
return False
elif left.val != right.val:
return False
outside = isSame(left.left, right.right)
inside = isSame(left.right, right.left)
result = outside and inside
return result
if not root:return True
return isSame(root.left, root.right)