Subtree of Another Tree(stack,bfs,递归)
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.
分析
母树用stack或者bfs遍历,找到相等子树然后递归
stack
class Solution:
def isSubtree(self, s, t):
"""
:type s: TreeNode
:type t: TreeNode
:rtype: bool
"""
stack = [s]
while stack:
cur = stack.pop()
if cur.val == t.val:
if self.check(cur, t):
return True
if cur.left:
stack.append(cur.left)
if cur.right:
stack.append(cur.right)
return False
def check(self, s, t):
if not s and not t:
return True
if s and t and s.val == t.val and self.check(s.left, t.left) and self.check(s.right, t.right):
return True
return False
bfs (deque)
class Solution:
def isSubtree(self, s, t):
"""
:type s: TreeNode
:type t: TreeNode
:rtype: bool
"""
q = collections.deque([s])
while q:
size = len(q)
for i in range(size):
cur = q.popleft()
if cur.val == t.val and self.check(cur,t):
return True
if cur.left:
q.append(cur.left)
if cur.right:
q.append(cur.right)
return False
def check(self, s, t):
if not s and not t:
return True
if s and t and s.val == t.val and self.check(s.left, t.left) and self.check(s.right, t.right):
return True
return False
Last updated