二叉树的子树和子结构
子树的意思是包含了一个结点,就得包含这个结点下的所有节点,一棵大小为n的二叉树有n个子树,就是分别以每个结点为根的子树。子结构的意思是包含了一个结点,可以只取左子树或者右子树,或者都不取。
直接上代码。这解释起来也蛋疼。
一.一个二叉树树是另一二叉树的子结构。
class Solution:
public:
bool isSubtree(TreeNode* pRoot1,TreeNode* pRoot2)
{
if(!pRoot2)return true;//相等于pRoot2结点比对完成
if(!pRoot1)return false;//pRoot1比对结束
if(pRoot2->val==pRoot2->val)
{
return isSubtree(pRoot1->left,pRoot2->left)&&isSubtree(pRoot1->right,pRoot2->right);
}else
{
return false;
}
}
bool HasSubtree(TreeNode* pRoot1,TreeNode* pRoot2)
{
if(!pRoot1)return false;
if(!pRoot2)return false;
return isSubtree(pRoot1,pRoot2)||HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2);
}
}
二.一个二叉树是另一个二叉树的子树,代码需要轻微的改动
class Solution:
public:
bool isSubtree(TreeNode* pRoot1,TreeNode* pRoot2)
{
if(!pRoot1&&!pRoot2)return true;
else return false;
if(pRoot2->val==pRoot2->val)
{
return isSubtree(pRoot1->left,pRoot2->left)&&isSubtree(pRoot1->right,pRoot2->right);
}else
{
return false;
}
}
bool HasSubtree(TreeNode* pRoot1,TreeNode* pRoot2)
{
if(!pRoot1)return false;
if(!pRoot2)return false;
return isSubtree(pRoot1,pRoot2)||HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2);
}