您的位置:首页 > Web前端

剑指offer18——树的子结构

2017-02-19 16:26 330 查看

题目

输入两棵二叉树 A 和 B,判断 B 是不是 A 的子结构。

思路

我们可以分成两步。第一步在树A中找到与B根节点值相同的节点,第二步判断两部分是否相同。

在A中查找与B根节点相同的节点实际上就是树的遍历。二叉树的遍历一般采用递归的方法。

bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
bool result = false;
if(pRoot2==NULL||pRoot1==NULL)
return false;
if(pRoot1->val==pRoot2->val)
result = dis(pRoot1,pRoot2);
if(!result)
result = HasSubtree(pRoot1->left,pRoot2);
if(!result)
result = HasSubtree(pRoot1->right,pRoot2);
return result;
}


总的代码:

class Solution {
public:
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2)
{
bool result = false;
if(pRoot2==NULL||pRoot1==NULL)
return false;
if(pRoot1->val==pRoot2->val)
result = dis(pRoot1,pRoot2);
if(!result)
result = HasSubtree(pRoot1->left,pRoot2);
if(!result)
result = HasSubtree(pRoot1->right,pRoot2);
return result;
}

bool dis(TreeNode* pRoot1, TreeNode* pRoot2){
if(pRoot2==NULL)
return true;
if(pRoot1==NULL)
return false;
if(pRoot1->val!=pRoot2->val)
return false;

return dis(pRoot1->left,pRoot2->left)&&dis(pRoot1->right,pRoot2->right);
}
};


这个题目主要考点就是二叉树的遍历和递归思想的运用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: