您的位置:首页 > Web前端

剑指offer 18---输入两棵二叉树A和B,判断B是不是A的子结构

2017-07-23 17:36 357 查看
输入两棵二叉树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);
}
};
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐