当前位置: 首页 > article >正文

力扣572:另一棵树的子树

力扣572:另一棵树的子树

给你两棵二叉树 rootsubRoot 。检验 root 中是否包含和 subRoot 具有相同结构和节点值的子树。如果存在,返回 true ;否则,返回 false

二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。

示例 1:

在这里插入图片描述

输入:root = [3,4,5,1,2], subRoot = [4,1,2]
输出:true
示例 2:

在这里插入图片描述

输入:root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]
输出:false

提示:

root 树上的节点数量范围是 [1, 2000]
subRoot 树上的节点数量范围是 [1, 1000]
-104 <= root.val <= 104
-104 <= subRoot.val <= 104

递归思想

遍历根节点的左子树和右子树,在左子树和右子树中找是否有相同的子树

如果根节点为空,则返回false,如果存在相同的树,则返回true

这里需要加一个判断树相同的函数,判断树相同小编在之前也写过–>力扣100:相同的树

/**
 * Definition for a binary tree node.
 * struct TreeNode {
 *     int val;
 *     struct TreeNode *left;
 *     struct TreeNode *right;
 * };
 */


bool isSameTree(struct TreeNode* p, struct TreeNode* q) {
    if(p==NULL&&q==NULL)
        return true;
    
    if(p==NULL||q==NULL)
        return false;
    
    if(p->val!=q->val)
        return false;

    return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}

bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){
    if(root==NULL)
        return false;
    
    if(isSameTree(root,subRoot))
        return true;
    
    return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
}

http://www.kler.cn/a/155903.html

相关文章:

  • C 语言 【模拟实现内存库函数】
  • SystemVerilog学习笔记(六):控制流
  • 量化交易系统开发-实时行情自动化交易-3.4.1.2.A股交易数据
  • 华为大变革?仓颉编程语言会代替ArkTS吗?
  • HarmonyOS的@State装饰器的底层实现
  • java八股-jvm入门-程序计数器,堆,元空间,虚拟机栈,本地方法栈,类加载器,双亲委派,类加载执行过程
  • 29 kafka动态配置
  • 华为OD机试真题-虚拟游戏理财-2023年OD统一考试(C卷)
  • windows 你的电脑不能投影到其他屏幕,请尝试重新安装驱动程序
  • C++-内联函数
  • 03-IDEA集成Git,初始化本地库,添加远程仓库,提交,拉取,推送,分支的快捷操作
  • ❀My学习Linux命令小记录(6)❀
  • Java 基础之数据类型
  • 什么是跨站脚本攻击
  • Clickhouse在货品标签场景的应用
  • 模型量化相关知识汇总
  • 程序的未定义行为(Undefined Behavior)
  • 含光伏发电的变电站供电系统设计
  • PMP考试解析
  • 目标检测YOLO系列从入门到精通技术详解100篇-【图像处理】图像识别
  • xxl-job(分布式调度任务)
  • 分享一下docker的使用心得
  • Jupyter Markdown 插入图片
  • Blender学习笔记:小车狂奔动画
  • Vue3 Router跳转传参
  • Vmware17虚拟机安装windows10系统