剑指Offer26.树的子结构

题目让判断B是不是A的子结构
但是我们进行判断是基于 两个树的根相等时, 去判断是否为子结构
针是否等于B的根节点的值对A做先序遍历的过程中 如果根节点相同我们去判断此时B是不是以该根节点的子树的子结构!
实际上进行先序遍历的同时要进行递归判断子结构

  1. B是不是A节点的子结构
  2. B是不是A的左子树的子结构
  3. B是不是A的右子树的子结构

实际上2和3就是在进行先序遍历!

因此需要借助辅助函数, hasSub(A,B)
该函数是用于判断,B是不是以A为根节点的树的子结构。如果A,B值不等,直接返回false

class Solution {
public:
    //B是不是以A为根节点的子结构
    bool hasSub(TreeNode* A,TreeNode* B){
        //既然是从A中找B的结构
        //如果B是空 或者 A和B同时为空,说明B走完了 A中有B的结构
        if(!B)  return true;
        if(!A)  return false;
        if(A->val != B->val){
            return false;
        }
        //判断B的左子树是不是A的左子树的子结构
        //B的右子树是不是A的右子树的子结构
        return hasSub(A->left,B->left) && hasSub(A->right , B->right); 
    }   
    //isSubStructure实际上是进行先序遍历!!!
    bool isSubStructure(TreeNode* A, TreeNode* B) {
        //如果B是空树,谁的子结构也不是
        //如果A走到空树,说明没有与A匹配的子结构 返回false
        if(B==NULL || A==NULL){
            return false;
        }
        //B是A的子结构 有三种情况
        //A和B根相同,判断B是不是A的子结构
        //B是A的左子树的子结构
        //B是A的右子树的子结构
		//
        return hasSub(A,B) || isSubStructure(A->left,B) || isSubStructure(A->right,B) ;
    }
};
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

2021狮子歌歌

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值