101. 对称二叉树
# 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 not root:
return True
return self.compare(root.left, root.right)
def compare(self, left, right):
if left == None and right == None:
return True
elif left == None or right == None:
return False
else:
if left.val != right.val:
return False
outer = self.compare(left.left, right.right)
inner = self.compare(left.right, right.left)
re = outer and inner
return re
100. 相同的树
# 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 isSameTree(self, p: TreeNode, q: TreeNode) -> bool:
return self.compare(p,q)
def compare(self, left, right):
if left == None and right == None:
return True
elif left == None or right == None:
return False
else:
if left.val != right.val:
return False
outer = self.compare(left.left, right.left)
inner = self.compare(left.right, right.right)
re = outer and inner
return re
572. 另一棵树的子树
# 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(object):
# def isSubtree(self, s, t):
# """
# :type s: TreeNode
# :type t: TreeNode
# :rtype: bool
# """
# if not s and not t:
# return True
# if not s or not t:
# return False
# return self.isSameTree(s, t) or self.isSubtree(s.left, t) or self.isSubtree(s.right, t)
# def isSameTree(self, s, t):
# if not s and not t:
# return True
# if not s or not t:
# return False
# return s.val == t.val and self.isSameTree(s.left, t.left) and self.isSameTree(s.right, t.right)
class Solution:
def isSubtree(self, root: TreeNode, subRoot: TreeNode) -> bool:
if not root and not subRoot:
return True
elif not root or not subRoot:
return False
zhong = self.compare(root, subRoot)
zuo = self.isSubtree(root.left,subRoot)
you = self.isSubtree(root.right,subRoot)
return zhong or zuo or you
def compare(self, left, right):
if left == None and right == None:
return True
elif left == None or right == None:
return False
else:
if left.val != right.val:
return False
subleft = self.compare(left.left, right.left)
subright = self.compare(left.right, right.right)
re = subleft and subright
return re