输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)
class Solution
{
public:
bool Hassubtree(TreeNode* root1, TreeNode* root2)
{
if (root1 == nullptr || root2 == nullptr) //约定树2不为空
return false; //两颗树的比较分为三种情况,树A根节点比较,树A的左子树比较,树A的右子树比较
return isequal(root1, root2) || Hassubtree(root1->left, root2) || Hassubtree(root1->right, root2);
}
bool isequal(TreeNode* p1, TreeNode* p2)
{
if (p2 == nullptr) //树p2先遍历完,说明是p2子树
return true;
if (p1 == nullptr) //树p1先遍历完,说明p2不是子树
return false;
if (p1->val == p2->val) //若p1,p2节点值相等,则比较左子树和右子树是否相等
return isequal(p1->left, p2->left) && isequal(p1->right, p2->right);
else
return false; //若p1,p2值不相等则 返回假
}
};