572. Subtree of Another Tree
Given two non-empty binary trees s and t, check whether tree t has exactly the same structure and node values with a subtree of s. A subtree of s is a tree consists of a node in s and all of this node's descendants. The tree s could also be considered as a subtree of itself.
Example 1: Given tree s:
3
/ \
4 5
/ \
1 2
Given tree t:
4
/ \
1 2
Return true, because t has the same structure and node values with a subtree of s.
Example 2: Given tree s:
3
/ \
4 5
/ \
1 2
/
0
Given tree t:
4
/ \
1 2
Return false.
解题要点:
Preorder遍历树,最后检测小树是否是大树的一部分。
# 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 isSubtree(self, s, t):
"""
:type s: TreeNode
:type t: TreeNode
:rtype: bool
"""
def preorder(t, left):
if t == None:
if left:
return "lNone"
else:
return "rNone"
return "#" + str(t.val) + " " + preorder(t.left, True) + " " + preorder(t.right, False)
return preorder(t, True) in preorder(s, True)
找树的重合点,然后检测是否一样。
# 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 isSubtree(self, s, t):
"""
:type s: TreeNode
:type t: TreeNode
:rtype: bool
"""
def identical(s, t):
if s == None and t == None:
return True
if s == None or t == None:
return False
return s.val == t.val and identical(s.left, t.left) and identical(s.right, t.right)
if t == None:
return True
if s == None:
return False
if identical(s, t):
return True
return self.isSubtree(s.left, t) or self.isSubtree(s.right, t)
Last updated
Was this helpful?