//判断root2是不是root1开头的子结构
boolIsSubTree(BiTreeNode *root1,BiTreeNode *root2)
{
//先判断root2
if(root2==NULL)
return true;
if(root1==NULL)
return false;
if(root1->data!=root2->data)
return false;
returnIsSubTree(root1->LC,root2->LC) &&IsSubTree(root1->RC,root2->RC);
}
//递归查找以root1为节点的树中,是否有和root2相同的值,如果有,则调用IsSubTree(root1, root2);
boolCheckIfSubTree(BiTreeNode *root1,BiTreeNode *root2)
{
if(root1==NULL)
return false;
bool result=false;
if(root1->data==root2->data)
result=IsSubTree(root1,root2);
if(result==false)
result=CheckIfSubTree(root1->LC,root2);
if(result==false)
result=CheckIfSubTree(root1->RC,root2);
return result;
}
首先在二叉树p中遍历寻找c的根节点,如果找到了,从这个节点开始遍历二叉树p,并且判定如果所有p对应的子节点都在c中出现,并且c不存在的p也不存在。就符合条件。