力扣——572.另一个树的子树

news/2024/9/15 22:40:57/ 标签: leetcode, 算法, 职场和发展

题目:

思路:

深度优先搜索,遍历root的每一个节点代表的整棵树是否和subroot一样。比较是否一样的时候可以从根节点开始递归,首先查看是否为空,然后值是否一样。

代码:

vs可运行代码:

要定义一下二叉树节点

#include <iostream>
#include<vector>
using namespace std;// 二叉树的定义
struct TreeNode {int val;TreeNode* left;TreeNode* right;TreeNode() : val(0), left(nullptr), right(nullptr) {}TreeNode(int x) : val(x), left(nullptr), right(nullptr) {}TreeNode(int x, TreeNode* left, TreeNode* right) : val(x), left(left), right(right) {}
};class Solution {
public:bool check(TreeNode *s, TreeNode *t) {//两者空 Tif (!s && !t) {return true;}//其中一个空 F//root值不一样 Fif (!s || !t || s->val != t->val) {return false;}//return 递归  s的左和t的左 && s的右和t的右return check(s->left, t->left) && check(s->right, t->right);}bool dfs(TreeNode *s, TreeNode *t) {return check(s, t) || dfs(s->left, t) || dfs(s->right, t);}bool isSubtree(TreeNode *s, TreeNode *t) {return dfs(s, t);}
};// 辅助函数:创建二叉树
TreeNode* createTree(vector<int>& values, int index) {if (index >= values.size() || values[index] == -1) {return nullptr;}TreeNode* root = new TreeNode(values[index]);root->left = createTree(values, 2 * index + 1);root->right = createTree(values, 2 * index + 2);return root;
}// 辅助函数:删除二叉树
void deleteTree(TreeNode* root) {if (root) {deleteTree(root->left);deleteTree(root->right);delete root;}
}int main() {// 创建示例树vector<int> rootValues = { 3, 4, 5, 1, 2 }; // 这里使用-1表示空节点vector<int> subRootValues = { 4, 1, 2 };TreeNode* root = createTree(rootValues, 0);TreeNode* subRoot = createTree(subRootValues, 0);Solution sol;bool result = sol.isSubtree(root, subRoot);cout << "Is subRoot a subtree of root? " << (result ? "Yes" : "No") << endl;// 清理内存deleteTree(root);deleteTree(subRoot);return 0;
}

力扣代码:

class Solution {
public:bool check(TreeNode *o, TreeNode *t) {if (!o && !t) {return true;}if ((o && !t) || (!o && t) || (o->val != t->val)) {return false;}return check(o->left, t->left) && check(o->right, t->right);}bool dfs(TreeNode *o, TreeNode *t) {if (!o) {return false;}return check(o, t) || dfs(o->left, t) || dfs(o->right, t);}bool isSubtree(TreeNode *s, TreeNode *t) {return dfs(s, t);}
};

小结:感觉今天和lhw交流他说的很有道理,LeetCode的每日一题可以当作学习使用(不需要绞尽脑汁去费劲想,思考一下思路直接看题解);而LeetCode100题是循序渐进的过程。

所以决定接下来的日子里,主攻100题,每日一题当作放松!


http://www.ppmy.cn/news/1506079.html

相关文章

循环依赖问题和Spring三级缓存

产生原因&#xff1a;两个或多个bean之间互相持有对方的引用 解决&#xff1a;spring三级缓存 一级缓存&#xff1a;单例池&#xff0c;存放已经经历了完整的生命周期的bean 二级缓存&#xff1a;存放早期的&#xff0c;还没走完生命周期的bean 三级缓存&#xff1a;存放对…

机械学习—零基础学习日志(python编程)

零基础为了学人工智能&#xff0c;正在艰苦的学习 昨天给高等数学的学习按下暂停键&#xff0c;现在开始学习python编程。 我学习的思路是直接去阿里云的AI学习课堂里面学习。 整体感觉&#xff0c;阿里云的AI课堂还是有一些乱&#xff0c;早期课程和新出内容没有更新和归档…

鸿蒙媒体开发【拼图】拍照和图片

拼图 介绍 该示例通过ohos.multimedia.image和ohos.file.photoAccessHelper接口实现获取图片&#xff0c;以及图片裁剪分割的功能。 效果预览 使用说明&#xff1a; 使用预置相机拍照后启动应用&#xff0c;应用首页会读取设备内的图片文件并展示获取到的第一个图片&#x…

Centos7安装Zabbix5.0的yum安装失败的解决方案

目前由于Centos7停服以及Zabbix官方限制了其5.0版本在Centos7上安装服务版本&#xff0c;因此可能会导致安装Zabbix5.0的一些组件无法正常安装。 zabbix5.0安装参考&#xff1a;一、zabbix 5.0 部署_zabbix5.0部署-CSDN博客 问题现象 当安装到zabbix的GUI包时报如下错误&…

docker上传镜像至阿里云

1、安装wsl2 WSL2安装&#xff08;详细过程&#xff09; 2、安装docker Docker在Windows下的安装及使用 3、创建私人阿里云镜像库 如何创建私人阿里云镜像仓库&#xff1f;&#xff08;保姆级&#xff09; 4、如何删除容器 (1) 查找正在使用该图像的容器 docker ps -a --filte…

ADC模数转换在stm32上的应用

ADC模数转换在stm32上的应用 文章目录 ADC模数转换在stm32上的应用1. 什么是ADC&#xff1f;2. stm32中的ADC3. 12位逐次逼近型ADC1. 工作原理2. 主要特性3. 关键部件4. 优点5. 缺点6. 应用7. 配置和使用 4. stm32的ADC转换模式1. 单次转换模式 (Single Conversion Mode)2. 连续…

SSB概述

SSB的作用 同步广播块 (SSB, Synchronization Signal Block) 在5G NR&#xff08;新无线电&#xff09;中的作用非常重要&#xff0c;主要包括以下几个方面&#xff1a; 时间和频率同步&#xff1a;SSB提供了初始的时间和频率同步信号&#xff0c;帮助用户设备&#xff08;UE…

搭建个人博客需要做哪些事

文章目录 前言搭建步骤站点服务器站点域名注册域名ICP 备案公安备案域名解析 博客图床图床是什么图床搭建 博客站点搭建建站工具本地搭建博客部署 站点运营百度收录百度统计 总结 前言 花了几天时间&#xff0c;搭建了一个个人博客&#xff0c;也算是完成了年初立的一个flag&a…

CV党福音:YOLOv8实现分类

YOLO作为目标检测领域的常青树&#xff0c;如今以及更新到了YOLOv10&#xff0c;并且还有YOLOX、YOLOS等变体&#xff0c;可以说该系列已经在目标检测领域占据了半壁江山&#xff0c;如今&#xff0c;YOLOv8的发行者ultralytics竟有一统江山之意&#xff0c;其在提出的框架中不…

使用 Streamlit 和 Python 构建 Web 应用程序

一.介绍 在本文中&#xff0c;我们将探讨如何使用 Streamlit 构建一个简单的 Web 应用程序。Streamlit 是一个功能强大的 Python 库&#xff0c;允许开发人员快速轻松地创建交互式 Web 应用程序。Streamlit 旨在让 Python 开发人员尽可能轻松地创建 Web 应用程序。以下是一些主…

SQLite批量INSERT

SQLite是一种轻量级、零配置的数据库管理系统。它的数据存储在一个单一的磁盘文件上,使得它非常适合嵌入式系统和移动应用。 在SQLite数据库中进行大批量记录INSERT,有三种方法,三种方法的效率由高低,本文举例说明。 方法一:逐条记录INSERT,这也是效率最低的方法 下面以…

用录制好的视频文件模拟PC电脑摄像头进行无人值守直播/抖音直播/视频号直播/快手直播

现在几乎全面都在刷短视频、看视频直播&#xff0c;现在市场上的数字人直播、无人直播设备也很多&#xff0c;但起步门槛都太高了&#xff0c;对于普通用户或者企业&#xff0c;实际只需要有那么一个简单的软件或者硬件&#xff0c;能将我们已经提前录制的视频作为实时视频源&a…

postgresql 分组合并 字段

postgresql 分组合并 字段 在PostgreSQL中&#xff0c;如果你想要将多个行的字段值合并为一个字段&#xff0c;你可以使用string_agg函数。这个函数可以将同一个组内的指定字段的值连接成一个字符串&#xff0c;并且可以自定义连接符。 下面是一个简单的例子&#xff0c;假设我…

等保测评中的访问控制与用户认证:构建安全的访问管理机制

在当今数字化时代&#xff0c;信息安全已成为企业和组织不可忽视的关键议题。等保测评&#xff0c;作为我国信息安全等级保护制度的重要组成部分&#xff0c;对访问控制与用户认证提出了严格要求&#xff0c;旨在构建安全的访问管理机制&#xff0c;保护信息资产不受未授权访问…

图片转换之heic转jpg(使用ImageMagick)

缘由&#xff1a;iphone的图库&#xff0c;用jpg拍照保存后内存占比较大&#xff0c;heic格式会微缩不少。问题来了&#xff0c;电脑不能直接小图预览heic。 分析&#xff1a;现在就是解决小图预览的问题&#xff08;大图用wps可以看&#xff09; 解决&#xff1a;查找了一些…

IO进程----文件IO

目录 IO进程 文件IO 1. 概念 2. 特点 3. 函数 3.1. 打开文件 3.2. 关闭文件 3.3. 读写文件 read write 3.4. 文件定位操作 文件属性获取 目录操作 IO进程 文件IO 1. 概念 在posix(可移植操作系统接口)中定义的一组输入输出的函数 2. 特点 1. 没有缓冲机制&#xff0c…

数据结构(java实现)——优先级队列,堆

文章目录 优先级队列堆堆的概念堆的模拟实现创建堆入堆判满删除判空获取栈顶元素 创建堆两种方式的时间复杂度堆排序java提供的PriorityQueue类基本的属性关于PriorityQueue类的三个构造方法关于PriorityQueue类中&#xff0c;入堆方法是怎样实现的&#xff1f;PriorityQueue注…

JavaFx中通过线程池运行或者停止多个周期性任务

在JavaFX中&#xff0c;要实现点击按钮启动多个周期性任务并通过多线程执行&#xff0c;并在任务结束后将结果写入多个文本组件中&#xff0c;同时提供另一个按钮来停止这些任务&#xff0c;你可以使用ScheduledExecutorService来管理周期性任务&#xff0c;并使用AtomicBoolea…

智能化的Facebook未来:AI如何重塑社交网络的面貌?

随着人工智能&#xff08;AI&#xff09;技术的飞速发展&#xff0c;社交网络的面貌正在经历深刻的变革。Facebook&#xff08;现Meta Platforms&#xff09;作为全球最大的社交媒体平台之一&#xff0c;正积极探索如何利用AI技术来提升用户体验、优化内容管理并推动平台创新。…

Iclone 8 摄像头切换

多个摄像头可以对每个摄像头制作动画&#xff0c;那要切换摄像头如何操作呢&#xff1f; 1.显示时间轴 2.轨道清单 3.项目 4.切换&#xff0c;在项目里面找到切换&#xff0c;点击右键[摄影机清单]就可以设置切换摄像头了。