二叉树算法题(1)

news2024/9/9 7:51:44

单值二叉树

在这里插入图片描述
思路:

  1. 若根结点为NULL,则直接返回true
  2. 若根结点的左右结点存在,且与根结点的值不相等,则返回false
  3. 递归根结点的左右子树
typedef struct TreeNode TreeNode; 
bool isUnivalTree(struct TreeNode* root) {
    if(root == NULL)
    {
        return true;
    }
    if(root->left && root->left->val != root->val)
    {
        return false;
    }
    if(root->right && root->right->val != root->val)
    {
        return false;
    }
    return isUnivalTree(root->left) && isUnivalTree(root->right);
}

请添加图片描述

相同的树

在这里插入图片描述
思路:

  1. pq同时为空,则树相同,返回true
  2. pq中有一个为空,则树不相同,返回false
  3. pq的值不相同,则树不相同,返回false
  4. 递归pq的左右孩子结点
typedef struct TreeNode TreeNode;
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);
}

在这里插入图片描述

对称的二叉树

在这里插入图片描述

思路:

  1. 与上道题的思路类似,只是当p往左结点遍历时,q需要向右结点遍历;当p往右结点遍历时,q需要向左结点遍历
typedef struct TreeNode TreeNode;
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->right) && isSameTree(p->right,q->left);
}

bool isSymmetric(struct TreeNode* root) {
    return isSameTree(root->left,root->right);
}

在这里插入图片描述

另一颗树的子树

在这里插入图片描述
在这里插入图片描述
思路:

  1. 此题也需借助相同的树的判断方式
  2. 当跟结点为空时,则返回false
  3. 当两树相同时,返回true
  4. 递归根结点的左子树,判断与subRoot是否相同,递归根结点的右子树,判断与subRoot是否相同,只需其中一个相同就为true
typedef struct TreeNode TreeNode;
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.coloradmin.cn/o/1963597.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

程序员修炼之路:深入广泛的必修课程

成为一名优秀的程序员,需要广泛而深入地学习多个领域的知识。这些课程不仅帮助建立扎实的编程基础,还培养了问题解决、算法设计、系统思维等多方面的能力。以下是一些核心的必修课: 计算机基础 计算机组成原理:理解计算机的硬件组…

一步步揭秘:浏览器输入URL后的那些事儿

Hello大家好,我是小米,一个热爱分享技术的IT达人。今天我们一起来聊聊一个大家每天都会用到但可能不太了解的过程:浏览器输入URL之后发生了什么。这是一个从用户输入到浏览器显示页面的完整过程,涉及到很多底层的网络基础知识。今天我们就一起来探究这个神秘的过程! DNS解…

Java 中的File类

路径分为绝对路径和相对路径。 相对路径肯定是相对谁来说的,一般是一个文件相对于另外一个文件而言的路径。 下面是一个例子,比如index.htm如何找到photo.jpg呢? c:/website/web/index.htmc:/website/img/photo.jpg 所以在index.htm中使用…

Python:类的属性(实例属性、类属性)和方法(实例方法、类方法、静态方法)

相关阅读 Pythonhttps://blog.csdn.net/weixin_45791458/category_12403403.html?spm1001.2014.3001.5482 Python是一门面向对象的编程语言,其核心概念之一是类。类是对象的蓝图或模板,定义了对象的属性和方法。理解类的属性和方法对于掌握Python编程至…

【Docker】常见概念|技术架构演进之路|八大架构|单机架构|应用数据分离架构|应用服务集群架构

目录 一、常见概念 应用(Application) / 系统(System) 模块(Module) / 组件(Component) 分布式(Distributed) 集群(Cluster) 主…

python调用MATLAB函数的一个诡异的问题,数据类型问题

记一次python调用MATLAB函数的诡异问题 说明(废话)解决方案总结 说明(废话) 这个问题的起因是python调用MATLAB函数的问题,归根结底,主要还是因为不同语言对于不同的数据表达的方式不同造成的问题。 pytho…

在Postman中引用JS库

前言 在做接口测试时,出于安全因素,请求参数需要做加密或者加上签名才能正常请求,例如:根据填写的请求参数进行hash计算进行签名。postman作为主流的接口调试工具也是支持请求预处理的,即在请求前使用JavaScript脚本对…

界面组件DevExtreme v24.2将发布一系列新组件、支持.NET 9

DevExtreme拥有高性能的HTML5 / JavaScript小部件集合,使您可以利用现代Web开发堆栈(包括React,Angular,ASP.NET Core,jQuery,Knockout等)构建交互式的Web应用程序。从Angular和Reac&#xff0c…

中小企业选择数字工厂管理系统需要注意哪些问题

在当今数字化转型的大潮中,中小企业作为经济体系的重要组成部分,正积极寻求通过引入数字工厂管理系统来提升生产效率、优化资源配置、增强市场竞争力。然而,面对市场上琳琅满目的数字工厂管理系统解决方案,中小企业在选择时往往面…

HarmonyOS鸿蒙- 延时执行

一、延时执行一次 3000 表示秒,可根据需求修改 //2秒后执行打印setTimeout(() > {console.log(Timer is end)},3000) 取消延时执行 // 3秒后执行打印 let timerId setTimeout(() > {console.log(Timer is end)},3000)// 取消timerId的延时 clearTimeout(timerId) 二、…

设计师的素材管理神器,eagle、千鹿大测评

前言 专业的设计师都会精心维护自己的个人素材库,常常需要耗费大量时间用于浏览采集、分类标注、预览筛选、分享协作,还要管理字体、图片、音视频等各类设计素材 如果你作为设计师的话,今天,就为大家带来两款热门的素材管理工具…

构建基于数据驱动的应用程序与Llamaindex——理解大型语言模型

如果你在阅读这本书,你可能已经探索过大型语言模型(LLMs)的领域,并且已经认识到它们的潜在应用以及它们的缺陷。本书旨在解决LLMs所面临的挑战,并提供一本实用指南,教你如何使用LlamaIndex构建数据驱动的LL…

57_Redis与Springboot的集合应用

前提 要实现,使用Redis存储登录状态 需要一个完整的前端后端的项目 前端项目搭建 解压脚手架安装依赖配置请求代理选做: 禁用EsLint语法检查 Vue Admin Template关闭eslint校验,lintOnSave:false设置无效解决办法_lintonsave: false-CSDN博客 后端项…

C++和R穿刺针吸活检肿瘤算法模型模拟和进化动力学量化差异模型

🎯要点 🎯模拟肿瘤细胞增生进化轨迹 | 🎯肿瘤生长的随机空间细胞自动机模型 | 🎯模拟穿刺活检的收集空间局部的肿瘤块,模拟针吸活检采集长而薄的组织样本 | 🎯构建不同参数模拟合成肿瘤测试集 | &#x1f…

【TS】TypeScript函数类型:提升函数的类型安全性和可读性

🌈个人主页: 鑫宝Code 🔥热门专栏: 闲话杂谈| 炫酷HTML | JavaScript基础 ​💫个人格言: "如无必要,勿增实体" 文章目录 TypeScript函数类型:提升函数的类型安全性和可读性1. 引言2. 基本函…

vue3 基于elementui el-table封装 hooks (未使用ts版本)

elementui-table封装 hooks js-hooks import { ref, reactive, onMounted } from vue import { ElMessage, ElMessageBox, ElNotification } from element-plus /*** FileDescription: el-table 函数式组件hooks--实现一个表格的数据加载、分页、搜索、删除和导出等操作,* fu…

tesseract 图片识别引擎

什么是tesseract Tesseract是一款开源的光学字符识别(OCR)引擎,用于从图像中提取文本。它由Ray Smith在惠普实验室于1985年至1995年开发,并在2005年由惠普将其作为开源软件发布。之后,Tesseract的开发由Google主导&am…

如何理解低代码?怎么用好低代码

怎样理解低代码 理解一个概念最好的办法就是找相关概念进行类比,那么想要单独理解低代码这个概念是不太行的。我们还需要了解“零代码”以及“纯代码”开发的概念。那么什么是低代码?其与“零代码”和“纯代码”的关系又是如何? 零代码 也许…

IDEA资源文件中文乱码问题解决方法

目录 一、问题描述二、解决方法 一、问题描述 IDEA中打开资源文件出现乱码。 二、解决方法 进入“Settings” -> “Editor” -> “File Encodings”,按下图修改箭头所指的三个地方:

java类加载和双亲委派及加载恶意类代码应用

前面的CC1和CC6,都是在Runtime.exec执行命令。如果WAF过滤了Runtime就寄,而且用命令的方式写入shell进行下一步利用,在流量中一个数据包就能把你的行为全部看完,很容易被分析出来。 如果用恶意字节码加载的方式,我们的…