- 判断树B是否是A的子树
方法
- 注意的点:
如果是比较两个小数是否相等,不能直接用==号,因为计算机中float和double都是有误差的如果两个小数小于0.0000001则认为相等
bool Equel(double num1,double num2){
if((num1 - num2 >-0.0000001)&&(num1 - num2 < 0.0000001)){
return true;
}else{
return false;
}
}
比较A是否包含B,首先比较当前根结点是否相等,跟节点如果相等再比较两个子节点,如果不相等,则比较A的下一个节点与B的根节点
这个不太熟悉,需要在看看
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2){
if(pRoot1 ==nullptr || pRoot2 == nullptr){
return false;
}
bool result = false;
if(pRoot1->val == pRoot2->val){
result = DoesTree1HaveTree2(pRoot1,pRoot2);
}
if(!result){
result = HasSubtree(pRoot1->left,pRoot2);
}
if(!result){
result = HasSubtree(pRoot1->right,pRoot2);
}
return result;
}
bool DoesTree1HaveTree2(TreeNode* pRoot1,TreeNode* pRoot2){
if(pRoot2 == nullptr){
return true;
}
if(pRoot1 == nullptr){
return false;
}
if(pRoot1->val != pRoot2->val){
return false;
}
return DoesTree1HaveTree2(pRoot1->left,pRoot2->left) && DoesTree1HaveTree2(pRoot1->right,pRoot2->right);
}
};