572. Subtree of Another Tree
Description:
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.
Difficulty:Easy
Example:
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.
方法1: Recursive
- Time complexity : O ( m ∗ n ) O\left ( m*n\right ) O(m∗n)
- Space complexity :
O
(
n
)
O\left ( n\right )
O(n)
思路:
遇到这种判断树是否如何的问题,大多是需要比较和递归的,老套路:固定起点,判断是否满足条件,直至到叶子节点。
class Solution {
public:
bool isSubtree(TreeNode* s, TreeNode* t) {
if (!s) return false;
if (helper(s, t)) return true;
return isSubtree(s->left, t) || isSubtree(s->right, t);
}
bool helper(TreeNode* s, TreeNode* t) {
if (!s && !t) return true;
if (!s || !t) return false;
if (s->val != t->val) return false;
return helper(s->left, t->left) && helper(s->right, t->right);
}
};