剑指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#