433,剑指 Offer-树的子结构

No amount of money ever bought a second of time. 
web

再多的钱也没法买回逝去的光阴。算法

问题描述微信



输入两棵二叉树A和B,判断B是否是A的子结构。(约定空树不是任意一个树的子结构)数据结构


B是A的子结构, 即A中有出现和B相同的结构和节点值。app


例如:数据结构和算法

给定的树 A:编辑器

     3svg

    / \url

   4   5spa

  / \

 1   2

给定的树 B:

   4 

  /

 1

返回 true,由于 B 与 A 的一个子树拥有相同的结构和节点值。


示例 1:

输入:A = [1,2,3], B = [3,1]

输出:false

示例 2:

输入:A = [3,4,5,1,2], B = [4,1]

输出:true


限制:

0 <= 节点个数 <= 10000


问题分析



要判断B是不是A的子结构,像下面这样,咱们只须要从根节点开始判断,经过递归的方式比较他的每个子节点便可,因此代码也很容易写

 1public boolean isSubStructure(TreeNode A, TreeNode B) {
2    //边界条件判断,若是A和B有一个为空,返回false
3    if (A == null || B == null)
4        return false;
5    return isSub(A, B);
6}
7
8boolean isSub(TreeNode A, TreeNode B) {
9    //这里若是B为空,说明B已经访问完了,肯定是A的子结构
10    if (B == null)
11        return true;
12    //若是B不为空A为空,或者这两个节点值不一样,说明B树不是
13    //A的子结构,直接返回false
14    if (A == null || A.val != B.val)
15        return false;
16    //当前节点比较完以后还要继续判断左右子节点
17    return isSub(A.left, B.left) && isSub(A.right, B.right);
18}

但实际上B若是是A的子结构的话,不必定是从根节点开始的,也多是下面这样

也就是说B不光有多是A的子结构,也有多是A左子树的子结构或者右子树的子结构,因此若是从根节点判断B不是A的子结构,还要继续判断B是否是A左子树的子结构和右子树的子结构,代码以下

 1public boolean isSubStructure(TreeNode A, TreeNode B) {
2    if (A == null || B == null)
3        return false;
4    //先从根节点判断B是否是A的子结构,若是不是在分别从左右两个子树判断,
5    //只要有一个为true,就说明B是A的子结构
6    return isSub(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B);
7}
8
9boolean isSub(TreeNode A, TreeNode B) {
10    //这里若是B为空,说明B已经访问完了,肯定是A的子结构
11    if (B == null)
12        return true;
13    //若是B不为空A为空,或者这两个节点值不一样,说明B树不是
14    //A的子结构,直接返回false
15    if (A == null || A.val != B.val)
16        return false;
17    //当前节点比较完以后还要继续判断左右子节点
18    return isSub(A.left, B.left) && isSub(A.right, B.right);
19}


总结



B是A的子结构不必定是从根节点开始判断B是不是A的子结构,也有可能B是A左子树或右子树的子结构,因此若是从根节点判断B不是A的子结构的时候还要分别判断A的子树中是否包含B。



374,二叉树的最小深度

373,数据结构-6,树

372,二叉树的最近公共祖先

367,二叉树的最大深度


长按上图,识别图中二维码以后便可关注。


若是以为有用就点个"赞"吧

本文分享自微信公众号 - 数据结构和算法(sjjghsf)。
若有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一块儿分享。

相关文章
相关标签/搜索