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

news/2025/4/26 13:22:38/

题目:

思路:

深度优先搜索,遍历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…