输入两棵二叉树A和B,判断B是不是A的子结构
思路:
1.先在A中找和B的根节点相同的结点
2.找到之后遍历对应位置的其他结点,直到B中结点遍历完,都相同时,则B是A的子树
3.对应位置的结点不相同时,退出继续在A中寻找和B的根节点相同的结点,重复步骤,直到有任何一棵二叉树为空退出
/*
struct TreeNode {
int val;
struct TreeNode *left;
struct TreeNode *right;
TreeNode(int x) :javascript:void(0);
val(x), left(NULL), right(NULL) {
}
};*/
class Solution {
public:
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
//1.先找到和子树根节点相同的结点
bool flag=false;
if((pRoot1!=NULL)&&(pRoot2!=NULL))
{
if(pRoot1->val==pRoot2->val)
{
//开始判断,此时找到了和子树根节点相同的结点
flag=HasSubtreetty(pRoot1, pRoot2);
}
if(!flag)
{
flag=HasSubtree(pRoot1->left, pRoot2);
}
if(!flag)
{
flag=HasSubtree(pRoot1->right, pRoot2);
}
}
return flag;
}
bool HasSubtreetty(TreeNode* pRoot1, TreeNode* pRoot2)
{
//该函数需要判断在找到和子树根节点相同的结点之后,判断其余结点是否相同
if(pRoot2==NULL)
{
return true;
}
if((pRoot1==NULL)&&(pRoot2!=NULL))
{
return false;
}
if(pRoot1->val!=pRoot2->val)
{
return false;
}
return HasSubtreetty(pRoot1->left, pRoot2->left)&&HasSubtreetty(pRoot1->right, pRoot2->right);
}
};