//以root1为节点的树中,是否有和root2相同的节点
bool IsTree2InTree1(Node* root1, Node* root2)
{
if (root1 == NULL)
return false;
bool result = false;
if (root1->_data == root2->_data)
result = IsSameTree(root1, root2);//有相同的节点
if (result == false)
result = IsTree2InTree1(root1->_left, root2);//root1的左子树中是否有和root2根节点相同的节点
if (result == false)
result = IsTree2InTree1(root1->_right, root2);//root1的右子树中是否有和root2根节点相同的节点
return result;
}
//root2是不是以root1开头的子树
bool IsSameTree(Node* root1, Node* root2)
{
if (root2 == NULL)//root2已走完,此时是root1的子树
return true;
if (root1 == NULL)//此时root2未走完,但root1已走完,返回false
return false;
if (root1->_data != root2->_data)
return false;
return IsSameTree(root1->_left, root2->_left) && IsSameTree(root1->_right, root2->_right);
}
判断一颗二叉树是是否是另一颗树的子树
最新推荐文章于 2022-04-08 17:43:30 发布