思路:二叉树问题大多数都可以使用递归解决,判断B是否为A的子结构可以考虑对A进行递归遍历,当A某个节点与B头节点相同时,调用函数判断B是否包含在A内。代码如下:包含两个递归过程,第一个递归过程用来遍历A树,第二个递归用来判断B是否在A内。
class Solution {
public:
bool isSubStructure(TreeNode* A, TreeNode* B) {
if(!A||!B) return false;
bool res = false;
if(A->val==B->val) res=compareAB(A,B);
if(!res) res=isSubStructure(A->left,B);
if(!res) res=isSubStructure(A->right,B);
return res;
}
bool compareAB(TreeNode* A,TreeNode* B) {
if(!B) return true;
if(!A) return false;
if(A->val!=B->val) return false;
return compareAB(A->left,B->left)&&compareAB(A->right,B->right);
}
};