先在Tree1中找到与Tree2根节点相同的结点,然后将此节点当做根节点判断是否与Tree2树结构相同
template<typename T>
bool DoseTree1HaveTree2(TreeNode<T>* root1, TreeNode<T>* root2)
{
if (root2 == NULL)
return true;
if (root1 == NULL)
return false;
if (root1->_data != root2->_data)
return false;
return DoseTree1HaveTree2(root1->_left, root2->_left) \
&& DoseTree1HaveTree2(root1->_right, root2->_right);
}
template<typename T>
bool HasSubtree(TreeNode<T>* root1, TreeNode<T>* root2)
{
bool result = false;
if (root1 != NULL && root2 != NULL)
{
if (root1->_data = root2->_data)
result = DoseTree1HaveTree2(root1, root2);
if (!result)
result = HasSubtree(root1->_left, root2);
if (!result)
result = HasSubtree(root1->_right, root2);
}
return result;
}