Skip to content

剑指offer67道,第17道题的解答应该有问题 #169

@zyf5988

Description

@zyf5988

带你快速刷完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

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions