bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { if (pRoot2 == NULL || pRoot1 == NULL) return false; //判断子树是否相同,并且是否为本树的子树 return IsSubtree(pRoot1, pRoot2) || HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2); }
// TODO: TEST CASE bool HasSubtree(BinaryTreeNode * pRoot1, BinaryTreeNode * pRoot2) { bool result = false; if(pRoot1 && pRoot2) { if(pRoot1->m_nValue == pRoot2->m_nValue) result = DoesTree1HaveTree2(pRoot1, pRoot2); if(!result) result = HasSubtree(pRoot1->m_pLeft, pRoot2); if(!result) result = HasSubtree(pRoot2->m_pRight, pRoot2); } return result; }
bool HasSubtree(BinaryTreeNode *pRoot1, BinaryTreeNode *pRoot2){ bool result = false; if (pRoot1 != NULL && pRoot2 == NULL) { if (pRoot1->m_value == pRoot2->m_value) { result = DoesTree1HaveTree2(pRoot1,pRoot2); } if (!result) { result = HasSubtree(pRoot1->m_pLeft, pRoot2); } if (!result) { result = HasSubtree(pRoot2->m_pRight, pRoot2); } } return result; }
// ==================== Test Code ==================== void Test(char* testName, BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2, bool expected) { if(HasSubtree(pRoot1, pRoot2) == expected) printf("%s passed.\n", testName); else printf("%s failed.\n", testName); }
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) { if (pRoot1 == NULL || pRoot2 == NULL) return false; return isSubTree(pRoot1, pRoot2) || HasSubtree(pRoot1->left, pRoot2) || HasSubtree(pRoot1->right, pRoot2); }