您当前的位置: 首页 > 

TechGuide

暂无认证

  • 3浏览

    0关注

    176博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

【每日一题】JZ17 树的子结构

TechGuide 发布时间:2021-09-05 20:27:41 ,浏览量:3

当你的才华还撑不起你的野心时,你应该静下心去学习 。 题目描述

输入两棵二叉树A,B,判断B是不是A的子结构。(ps:我们约定空树不是任意一个树的子结构)

输入:A = [1,2,3], B = [3,1]
输出:false
解题思路

在这里插入图片描述 若树 B 是树 A 的子结构,则子结构的根节点可能为树 A 的任意一个节点。因此,判断树 B 是否是树 A 的子结构,需完成以下两步工作:

  1. 先序遍历树 A 中的每个节点 nA (对应函数 isSubStructure(A, B))
  2. 判断树 A 中 以 nA 为根节点的子树是否包含树 B (对应函数 recur(A, B))
参考代码 Java版本
class Solution {
    public boolean isSubStructure(TreeNode A, TreeNode B) {
        return (A != null && B != null) && (recur(A, B) || isSubStructure(A.left, B) || isSubStructure(A.right, B));
    }
    boolean recur(TreeNode A, TreeNode B) {
        if(B == null) return true;
        if(A == null || A.val != B.val) return false;
        return recur(A.left, B.left) && recur(A.right, B.right);
    }
}
// 关注TechGuide,大厂笔经面经闪电速递!
CPP版本
class Solution {
public:
    bool isSubStructure(TreeNode* A, TreeNode* B) {
        return (A && B) && (recur(A, B) || isSubStructure(A->left, B) || isSubStructure(A->right, B));
    }

    bool recur(TreeNode* A, TreeNode* B) {
        if(!B) return true;
        if(!A || A->val != B->val) return false;
        return recur(A->left, B->left) && recur(A->right, B->right);
    }
}
// 关注TechGuide,大厂笔经面经闪电速递!
创作不易,你的鼓励是我创作的动力,如果你有收获,点个赞吧👍
关注
打赏
1665329535
查看更多评论
立即登录/注册

微信扫码登录

0.0397s