其他分享
首页 > 其他分享> > 【每日一题】JZ17 树的子结构

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

作者:互联网

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

题目描述

输入两棵二叉树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,大厂笔经面经闪电速递!
创作不易,你的鼓励是我创作的动力,如果你有收获,点个赞吧

标签:JZ17,TreeNode,recur,每日,子结构,right,return,isSubStructure
来源: https://blog.csdn.net/weixin_41896265/article/details/120120508