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

另一棵树的子树

目录

题目

思路

代码1 :相同的树

代码二:解题

注意点


题目

给你两棵二叉树 root 和 subRoot 。检验 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

思路

何为子树:

二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点

明白何为子树之后,只需要让root的所有子树,与subRoot进行比较,判断是不是相同的树即可。

代码1 :相同的树


bool isSameTree(struct TreeNode* p, struct TreeNode* q) {//空节点也需要判断if (p == NULL && q == NULL)        //只有当树全部走完之后,才能return true;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)    //题目中subroot不为空。 当root为空时,一定返回falsereturn false;if (isSameTree(root, subRoot))      //是相同的树。bool类型可以直接当if条件判断值return true;return isSubtree(root->left, subRoot)       //不断调用 本 函数的过程,就是不断递归遍历二叉树的过程|| isSubtree(root->right, subRoot);}

注意点

1.

  • root 树上的节点数量范围是 [1, 2000]
  • subRoot 树上的节点数量范围是 [1, 1000]

因此

     

   if (root == NULL)    //题目中subroot不为空。 当root为空时,一定返回false

        return false;

root为空,可以直接返回false

root不断递归,当到空时,一定不会是相同的树。

2.

有了判断的函数,返回类型是bool类型,可以直接调用此函数

    if (isSameTree(root, subRoot))      //是相同的树。bool类型可以直接当if条件判断值

        return true;

3.

return isSubtree(root->left, subRoot)       //不断调用 本 函数的过程,就是不断递归遍历二叉树的过程

        || isSubtree(root->right, subRoot);

递归时,调用的是本函数,而不是子函数。

递归调用本函数的过程中,就完成二叉树的不断“扩枝”。

对于递归调用而言,其形状可以理解为二叉树的扩枝过程,只不过不断扩枝的过程中,先走一边,再走另一边。

遍历调用时,可以存在前序、中序、后续三种情况。

这三种情况,可以理解为递归调用的“思想”, 而不是“死代码”。

http://www.lryc.cn/news/339976.html

相关文章:

  • 【hive】单节点搭建hadoop和hive
  • Aurora 协议学习理解与应用——Aurora 8B10B协议学习
  • Vue基础使用之V-Model绑定单选、复选、动态渲染选项的值
  • 分析ARP解析过程
  • 为硬刚小米SU7,华为智界S7整出了「梅开二度」操作
  • 408数据结构,怎么练习算法大题?
  • imgcat 工具
  • Anaconda换清华源
  • react使用npm i @reduxjs/toolkit react-redux
  • Nessus【部署 03】Docker部署漏洞扫描工具Nessus详细过程分享(下载+安装+注册+激活)文末福利
  • 2023年看雪安全技术峰会(公开)PPT合集(11份)
  • Docker仅需3步搭建免费私有化的AI搜索引擎-FreeAskInternet
  • 线程安全的单例模式
  • OpenHarmony实战开发-Grid和List内拖拽交换子组件位置。
  • 设计模式:时序图
  • 前端性能监控(面试常见)
  • react17 + antd4 如何实现Card组件与左侧内容对齐并撑满高度
  • Rust入门-Hello World
  • 堆放砖块-第12届蓝桥杯选拔赛Python真题精选
  • 019——IIC模块驱动开发(基于EEPROM【AT24C02】和I.MX6uLL)
  • 【开发篇】十三、JVM基础参数设置与垃圾回收器的选择
  • 多维 HighCharts
  • 单细胞RNA测序(scRNA-seq)cellranger count的细胞定量和aggr整合
  • Unity URP 2021 Release-Notes
  • 最新IntelliJ IDEA 2024.1 安装和快速配置教程
  • 24应届生求职中QAQ
  • centos7离线安装postgresql13
  • 【JavaSE】搞定String类
  • 数字乡村创新实践探索农业现代化与农村治理现代化新路径:科技赋能农村全面振兴与农民幸福生活
  • 【从零开始手搓12306项目】四、12306是如何成为全球最忙碌的网站之一?