C++,剑指Offer原书代码详解

树的子结构

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

先在树A中找到值为树B根节点的值的节点,然后判断这个节点的子树是否含有和树B一样的结构。

  1. 第一步中,查找与根节点值一样的节点,采用递归的方法来遍历树。
  2. 第二步中,同样采用递归的方法,判断判断当前对应节点是否相同,然后递归判断左、右节点,递归终止条件是到达了叶节点。
class Solution {
    bool DoesTree1HaveTree2(TreeNode* pRoot1, TreeNode* pRoot2){
        if(pRoot2 == nullptr)
            return true;

        if(pRoot1 == nullptr)
            return false;

        if(!(pRoot1->val==pRoot2->val))
            return false;

        return DoesTree1HaveTree2(pRoot1->left, pRoot2->left) &&
        DoesTree1HaveTree2(pRoot1->right, pRoot2->right);
    }
public:
    bool HasSubtree(TreeNode* pRoot1, TreeNode* pRoot2) {
        bool result = false;
        
        if(pRoot1 != nullptr && pRoot2 != nullptr)
        {
            if(pRoot1->val==pRoot2->val)
                result = DoesTree1HaveTree2(pRoot1, pRoot2);
            if(!result)
                result = HasSubtree(pRoot1->left, pRoot2);
            if(!result)
                result = HasSubtree(pRoot1->right, pRoot2);
        }
        
        return result;
    }
};
全部评论
if(pRoot2 == nullptr) return true; if(pRoot1 == nullptr) return false; 这两个if语句上下反一下,结果就不对了,不明白为啥?有大神能给解释下麽?
点赞 回复 分享
发布于 2022-03-10 19:53
还是这个代码好理解,牛客官方哪个我看着有i但不太理解
点赞 回复 分享
发布于 2022-10-20 21:42 湖南

相关推荐

11-24 11:23
门头沟学院 C++
点赞 评论 收藏
分享
hso_:哈哈哈哈哈哈我没offer一样在同一道题开喷了
投递深圳同为数码等公司10个岗位
点赞 评论 收藏
分享
11-21 11:26
已编辑
门头沟学院 前端工程师
Apries:这个阶段来说,很厉害很厉害了,不过写的简历确实不是很行,优势删掉吧,其他的还行
点赞 评论 收藏
分享
10 1 评论
分享
牛客网
牛客企业服务