剑指offer:树的子结构
class Solution{
public:
bool HasSubtreeCore(TreeNode* pRoot1, TreeNode* pRoot2) {
if (pRoot2 == nullptr) return true;
if (pRoot1 == nullptr) return false;
if(pRoot1 -> val == pRoot2 -> val) {
return HasSubtreeCore(pRoot1->left, pRoot2->left) &&
HasSubtreeCore(pRoot1->right, pRoot2->right);
}
else {
return false;
}
}
bool HasSubtree(TreeNode* pRoot1,TreeNode* pRoot2){
if(pRoot1==nullptr || pRoot2==nullptr) return false;
return HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2)||HasSubtreeCore(pRoot1,pRoot2);
}
};
首先判断子数为空吗,为空为true,判断主数为空吗,为空为false;当满足主数和子树的指针指向的值一致时,再分别判断数的左右叶子节点一样不,另一个主函数中,如果两个指针有一个为空,则为false。返回(有可能是主数当前结点的的左子树和子树的当前节点一样;也有可能是主数当前结点的的右子树和子树的当前节点一样;还有一种可能是两个指针指向的节点正好相等(去到第一次定义的那个函数HasSubtreeCor里去,然后再判断其左右子树相不相等))
#剑指offer#
