主要考察树的遍历
直接上代码:
class Solution {
public:
bool isSubStructure(TreeNode* A, TreeNode* B) {
bool ans=false;
if(A&&B)
{
if(A->val==B->val)
{
ans=isSub(A,B);
}
if(!ans)
{
ans=isSubStructure(A->left,B);//注意这里用的是isSubStructure而不是isSub
}
if(!ans)
{
ans=isSubStructure(A->right,B);
}
}
return ans;
}
bool isSub(TreeNode *A,TreeNode *B)
{
if(B==NULL) return true;
if(A==NULL) return false;
return A->val==B->val && isSub(A->left,B->left) && isSub(A->right,B->right);
}
};
写的好看点:
class Solution {
public:
bool isSubStructure(TreeNode* A, TreeNode* B) {
if(A==NULL||B==NULL) return false;
return isSub(A,B)||isSubStructure(A->left,B)||isSubStructure(A->right,B);
}
bool isSub(TreeNode *A,TreeNode *B)
{
if(B==NULL) return true;
if(A==NULL) return false;
return A->val==B->val && isSub(A->left,B->left) && isSub(A->right,B->right);
}
};