题解 | #树的子结构#

树的子结构

https://www.nowcoder.com/practice/6e196c44c7004d15b1610b9afca8bd88

树的子结构:最直观的想法是,使用双指针,一个指针指向A,一个指针指向B,首先遍历树A,然后针对树A的当前结点,判断B是否是以当前结点为根的子树的子结构。

//判断B是否是和以A为根的子树匹配
bool isSame(TreeNode *pRoot1,TreeNode *pRoot2)
{
    //递归出口是如果pRoot2为空则为真
    if(!pRoot2)
      return true;
    //反之如果pRoot2不为空但是pRoot1为空则为假
    else if(!pRoot1)
      return false;
    //B和以A为根的子树匹配所需要满足的条件即为:B和A当前节点相等且B的左与A的左匹配且B的右和A的右匹配
    return pRoot1->val==pRoot2->val&&isSame(pRoot1->left,pRoot2->left)&&isSame(pRoot1->right,pRoot2->right);
}
//判断树B是否是树A的子结构 其中是B是整个树A的子结构 并不一定是以A为根节点的 即A的根节点与B的根节点相等的匹配
bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) 
{
    //递归出口即为A或者B为空树则为false
    if(!pRoot1||!pRoot2)
       return false;
    //B是A的子结构所需要满足的条件即为:B是以A为根节点的子树或者B是A的左孩子树的子结构或者B是A的右孩子的子结构
    return isSame(pRoot1,pRoot2)||HasSubtree(pRoot1->left,pRoot2)||HasSubtree(pRoot1->right,pRoot2);
}

#树的子结构#
剑指offer 文章被收录于专栏

剑指offer专栏主要分享剑指offer题解。

全部评论

相关推荐

09-22 09:42
门头沟学院 Java
牛客37185681...:马德,我感觉这是我面过最恶心的公司,一面是两个女hr,说什么实习前几个月属于试用期,试用期过了才能转成正式实习生,我***笑了,问待遇就是不说,问能不能接受全栈,沙币公司
如果可以选,你最想去哪家...
点赞 评论 收藏
分享
评论
1
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务