C++/代码:
class Solution {
public:
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
if (!pRoot1 || !pRoot2) return false;//先判断空树返回false
if (IsPart(pRoot1,pRoot2)) return true;//先找根节点
return HasSubtree(pRoot1->left,pRoot2) || HasSubtree(pRoot1->right,pRoot2); //换个根节点
}
bool IsPart(TreeNode* p1,TreeNode* p2) {
if (!p2) return true; //p2树为空,则为真子树
if (!p1 || p1->val != p2->val) return false; //p1为空,或者根节点不相同则为假
return IsPart(p1->left,p2->left) && IsPart(p1->right,p2->right); //根结点相同,验证左子树和右子树是否相同
}
};
京公网安备 11010502036488号