二叉樹的定義:
struct BinaryTreeNode{ int m_nValue; BinaryTreeNode* m_pLeft; BinaryTreeNode* m_PRight;};思路: 1.遍歷兩個二叉樹,分別判斷其的根節點,左右孩子的值是否相等 2.若根節點值相等,但其左右孩子值不相等,我們需要條跳到根節點上重新進行判斷 //遞歸來說思路比較清晰,我們用遞歸來解決這個問題
bool HasSubtree(BinaryTreeNode * pRoot1, BinaryTreeNode* pRoot2){ bool result = false; if (pRoot1 != NULL &&pRoot2 != NULL) { if (pRoot1->m_nValue == pRoot2->m_nValue) { result = DoesTree1HaveTree2(pRoot1, pRoot2); } if (!result) { result = HasSubtree(pRoot1->m_pLeft, pRoot2); } if (!result) { result = HasSubtree(pRoot1->m_pRight, pRoot2); } } return result;}//判斷樹1是否有樹2//遞歸函數肯定要有出口bool DoesTree1HaveTree2(BinaryTreeNode* pRoot1, BinaryTreeNode* pRoot2){ if (pRoot1 == NULL) { return false; } if (pRoot2 == NULL) { return true; } if (pRoot1->m_nValue != pRoot2->m_nValue) { return false; } return DoesTree1HaveTree2(pRoot1->m_pLeft, pRoot2->m_pLeft) && DoesTree1HaveTree2(pRoot1-> m_pRight, pRoot2->m_pRight);//判斷左右子樹是否相等}新聞熱點
疑難解答