(1) 进行树的遍历
(2)判断树1中以R为根节点的子树是不是和树B具有相同的结构
class Solution {
public:
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
bool result=false;//设置标志位
if(pRoot1!=nullptr&&pRoot2!=nullptr)
{
result=DoseTree1HaveTree2(pRoot1,pRoot2);//判断两个节点是否为空
if(!result)
result=HasSubtree(pRoot1->left,pRoot2);
if(!result)
result=HasSubtree(pRoot1->right,pRoot2);
}
return result;
}
bool DoseTree1HaveTree2(TreeNode* pRoot1,TreeNode* pRoot2)
{
if(pRoot2==nullptr)
return true;
if(pRoot1==nullptr)
return false;
if(!Equal(pRoot1->val,pRoot2->val))
return false;
return DoseTree1HaveTree2(pRoot1->left,pRoot2->left)&&DoseTree1HaveTree2(pRoot1->right,pRoot2->right);
}
bool Equal(double num1,double num2)
{
if((num1-num2>-0.0000001)&&(num1-num2<0.0000001))
return true;
else
return false;
}
};