[101. Symmetric Tree(https://leetcode.com/problems/symmetric-tree/)
题目描述
判断是否是镜像二叉树(对称)
例子 略
思想 (递归) 定义一辅助函数,输入为left和right,判断是否相等。 (迭代) 定义两个栈,层次遍历时判断,并分别从左向右和从右向左存储。
解法1 递归
# Definition for a binary tree node.
# class TreeNode(object):
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution(object):
def isSymmetric(self, root):
"""
:type root: TreeNode
:rtype: bool
"""
if not root:
return True
return self.helper(root.left, root.right)
def helper(self, left, right):
if not left and not right:
return True
if not left or not right or left.val != right.val:
return False
return self.helper(left.left, right.right) and self.helper(left.right, right.left)
# class TreeNode:
# def __init__(self, x):
# self.val = x
# self.left = None
# self.right = None
class Solution:
def isSymmetric(self, root: TreeNode) -> bool:
if not root or not root.left and not root.right:
return True
if not root.left or not root.right:
return False
stack1 = [root.left]
stack2 = [root.right]
while stack1 and stack2:
node1 = stack1.pop()
node2 = stack2.pop()
if node1.val != node2.val:
return False
if node1.left and node2.right:
stack1.append(node1.left)
stack2.append(node2.right)
elif node1.left or node2.right:
return False
if node1.right and node2.left:
stack1.append(node1.right)
stack2.append(node2.left)
elif node1.right or node2.left:
return False
return True