leetcode 572. 另一棵树的子树

另一棵树的子树

题目

在这里插入图片描述
在这里插入图片描述

题解

递归
官方题解还用到了kmp和哈希的。。。。这里我就没看了

2021.12.7

这题的递归,我有点没弄明白,后来看了题解才忽略了,两个二叉树完全相等的情况。。。。

class Solution {
public:
    bool check(TreeNode*root,TreeNode*subRoot) //判断是否是一个相同的树
    {
        //递归结束条件一:当其左右子树为空 代表已经匹配上
        if(root ==nullptr&&subRoot == nullptr)return true;
        //递归结束条件二:倘若有一个子树不为空 代表未匹配上
        if(!root||!subRoot)return false;
        //递归结束条件三 若节点值不同 代表未匹配上
        if(root->val != subRoot->val) return false;  
        //若为相同一个树 则两棵树的左右子树是相同的 同步移动两棵树的指针
    return check(root->left,subRoot->left)&&check(root->right,subRoot->right);
    }
    bool isSubtree(TreeNode* root, TreeNode* subRoot) {
        //若subRoot为空树 怎么比较都是true
        //if(subRoot == nullptr)return true;
        //若root为空树,怎么比较都是false
        if(root == nullptr)return false;
        //符合subRoot是root子树的三个条件:两棵树完全相同;SubRoot为root的左子树,SubRoot为root的右子树
   return check(root,subRoot)||isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值