原题
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.
解法
参考: 【LeetCode】572. Subtree of Another Tree 解题报告(Python & Java)
DFS. 定义isSameTree函数, 检查s和t是否为相同的树. Base case 是当s和t都为空时返回True, 当s和t有一个为空时, 返回False.
Time: O(m*n), m是s的节点数, n是t的节点数
Space: O(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 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
if s.val != t.val:
return False
else:
return self.isSameTree(s.left, t.left) and self.isSameTree(s.right, t.right)