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

相关推荐

不愿透露姓名的神秘牛友
07-10 11:27
明天又是董事长面,啥时候是个头啊
在太阳里长大的人:公司就仨人吧😂
点赞 评论 收藏
分享
05-23 20:31
已编辑
武汉大学 Java
内向的柠檬精在研究求...:注意把武大标粗标大 本地你俩不是乱杀
实习进度记录
点赞 评论 收藏
分享
一表renzha:手写数字识别就是一个作业而已
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-09 12:02
ssob上原来真有BOSS啊
硫蛋蛋:这种也是打工的,只不是是给写字楼房东打工
点赞 评论 收藏
分享
评论
10
1
分享

创作者周榜

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