首先先要有一个判断根据两个根节点判断两个树是否相等的接口,然后再利用递归,在需要被比较的树里进行前序遍历来得出是否有子树.
bool issame(struct TreeNode* root, struct TreeNode* subRoot)
{
if(root==NULL&&subRoot==NULL)
return true;
if(root!=NULL&&subRoot==NULL)
return false;
if(root==NULL&&subRoot!=NULL)
return false;
if(root->val!=subRoot->val)
return false;
int x1=issame(root->left,subRoot->left);
int x2=issame(root->right,subRoot->right);
if(x1&&x2)
return true;
return false;
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot)
{
if(subRoot==NULL)
return false;
if(root==NULL)
return false;
if(issame(root, subRoot))
return true;
return (isSubtree(root->left, subRoot)||isSubtree(root->right, subRoot));
}
结尾:今天的分享到此结束,喜欢的朋友如果感觉有帮助可以点赞三连支持,咱们共同进步!