1165. 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
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.
解法1:
这题其实并不算太容易,相当于递归套递归。
/**
* Definition of TreeNode:
* class TreeNode {
* public:
* int val;
* TreeNode *left, *right;
* TreeNode(int val) {
* this->val = val;
* this->left = this->right = NULL;
* }
* }
*/
class Solution {
public:
/**
* @param s: the s' root
* @param t: the t' root
* @return: whether tree t has exactly the same structure and node values with a subtree of s
*/
bool isSubtree(TreeNode * s, TreeNode * t) {
if (!s) return false;
if (compare(s, t)) {
return true;
} else {
return isSubtree(s->left, t) || isSubtree(s->right, t);
//注意这里不是compare(s->left, t) || compare(s->right, t);
}
}
private:
bool compare(TreeNode * s, TreeNode * t) {
if (!s && !t) return true;
if (!s || !t) return false;
if (s->val != t->val) return false;
if (s->val == t->val) { //注意!这里只需要值相等,地址不需要相等
return compare(s->left, t->left) && compare(s->right, t->right);
}
}
};
另外,Leetcode 1367. Linked List in Binary Tree 那道题跟这题很像。