-
Notifications
You must be signed in to change notification settings - Fork 1.6k
Open
Description
带你快速刷完67道剑指offer的第17道题树的子结构。原始代码在提交样例时,第19个样例出现错误。
该样例输入为{1,7,3,2,6,#,#,4,5},{2,4,5},正确输出为True,以源代码提交输出为false。
经过分析发现,该第二个树为第一个树的左子树的左子树。如果在HasSubtreeCore的else判断中直接返回false就会出现该错误。
究其根本是在主程序中的三个或判断并不能完全覆盖所有子树,子树的子树就被直接忽略掉了。
将程序改为:
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 HasSubtreeCore(pRoot1->left, pRoot2) || HasSubtreeCore(pRoot1->right, pRoot2);
}
}
所有样例正确通过。
Metadata
Metadata
Assignees
Labels
No labels