题目描述:
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 2Return 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 2Return false.
给定两个二叉树t和s,判断t是否为s的子树。一般的方法是比较根结点,根据比较结果进行递归,由于不一定从根结点开始匹配,所以定义两个递归函数isSubtree和isSubtree_from_cur,如果确定从根结点开始匹配的话,那么左子树和右子树都要从对应的根结点开始匹配。
class Solution {
public:
bool isSubtree(TreeNode* s, TreeNode* t) {
if(t==NULL&&s==NULL) return true;
else if(t==NULL&&s!=NULL) return false;
else if(t!=NULL&&s==NULL) return false;
if(s->val==t->val)
return isSubtree(s->left,t)||isSubtree(s->right,t)||
(isSubtree_from_cur(s->left,t->left)&&isSubtree_from_cur(s->right,t->right));
else return isSubtree(s->left,t)||isSubtree(s->right,t);
}
bool isSubtree_from_cur(TreeNode* s, TreeNode* t){
if(t==NULL&&s==NULL) return true;
else if(t==NULL&&s!=NULL) return false;
else if(t!=NULL&&s==NULL) return false;
if(t->val!=s->val) return false;
return isSubtree_from_cur(s->left,t->left)&&isSubtree_from_cur(s->right,t->right);
}
};
本文探讨了二叉树中子树匹配的问题,并提供了一种解决方案。通过定义两个递归函数isSubtree和isSubtree_from_cur来实现对两棵树的结构和节点值的比较。
388

被折叠的 条评论
为什么被折叠?



