/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
#include <cstddef>
class Solution {
public:
bool recursion(TreeNode* root1,TreeNode* root2){
if(root1==NULL&&root2!=NULL){
return false;
}
if(root1==NULL||root2==NULL){
return true;
}
if(root1->val!=root2->val){
return false;
}
return recursion(root1->left,root2->left)&&recursion(root1->right, root2->right);
}
//对A树的每一个节点,都同步遍历查看是否匹配B树,类似字符串匹配的暴力解法
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
if(pRoot2==NULL||pRoot1==NULL){
return false;
}
bool flag1=recursion(pRoot1, pRoot2);
bool flag2=HasSubtree(pRoot1->left, pRoot2);
bool flag3=HasSubtree(pRoot1->right, pRoot2);
return flag1||flag2||flag3;
}
};
对于树的问题用递归解法的话,只需要考虑根节点,左孩子,有孩子,然后再去思考题目对这三个节点所需要采取的措施。

京公网安备 11010502036488号