数据结构 二叉树 力扣例题AC——代码以及思路记录

LCR 175. 计算二叉树的深

某公司架构以二叉树形式记录,请返回该公司的层级数。

AC

int calculateDepth(struct TreeNode* root) {
    if (root == NULL)
	{
		return 0;
	}
	else
	{
		return 1 + fmax(calculateDepth(root->left), calculateDepth(root->right));
	}
}

代码思路

我这里直接使用的函数,在C语言中没有max函数,只有fmax函数,在头文件<math.h>中,C++中有max函数。

使用递归,当前节点是空就返回0,告诉上一层你已经是最后一层了,上一层就可以返回1,接着就开始逐次向上传递,传递的过程中,要看传递上来的值哪边更大,因为深度是看最大的一条路径,只需要传递最大的就可以,所以直接用函数比较出来然后传递就可以。

965. 单值二叉树

如果二叉树每个节点都具有相同的值,那么该二叉树就是单值二叉树。

只有给定的树是单值二叉树时,才返回 true;否则返回 false。

AC

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);
}

代码思路

遍历一遍所有节点,但是在遍历的过程中,进行当前节点和他的左子树与右子树结点的值的比较,前提是有左子树结点和右子树结点,如果说,有左子树也有右子树结点,就需要继续向下检查,如果值不同就返回false,遍历到最底下为空返回true开始返回,返回的时候用逻辑与,这样只要有一个false最后就不是单值,反之是单值。

101. 对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。

AC

bool _isSymmetric(struct TreeNode* root1,struct TreeNode* root2) {
    // 都为空
    if(root1 == NULL && root2 == NULL)
    {
        return true;
    }
    // 其中一个不为空
    if(root1 == NULL || root2 == NULL)
    {
        return false;
    }
    // 都不为空但值不同
    if(root1->val != root2->val )
    {
        return false;
    }
    return _isSymmetric(root1->left, root2->right) 
        && _isSymmetric(root1->right, root2->left);
}


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

代码思路

检查是否对称,那就是检查子树的左子树和右子树是否对称,原函数传入root没办法递归,所以创建子函数传进去左右子树进行检查。检查对称首先检查当前节点是否相同,再检查,左子树的左子树和右子树的右子树,左子树的右子树和右子树的左子树是否相同,整体思路和检查是否是同一棵树相同,分为三种if,1.当前两颗子树均为空 2.其中一颗为空 3.都不为空但是值不同,这三种都不符合说明当前两个节点相同且还有子树,仍可以向下递归,调用递归函数。这道题要注意判断的时候,他是镜像的,是左右子树对称。

100. 相同的树

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

AC

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);
}

代码思路

整体逻辑:先比较根,不相等就返回false,相等就检查左子树和右子树

比较根的情况:都为空,则返回true;其中一个为空,左或右肯定还有子树,那肯定不一样,返回false;都不为空,但是不相等,返回false。如果以上都不是,那说明该节点相等且有子树,那就接着去检查他的子树,执行递归语句。

572. 另一棵树的子树

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

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

AC

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(root->val == subRoot->val)
    {
        if(isSameTree(root,subRoot))
        {
            return true;
        }
    }

    return isSubtree(root->left,subRoot) || isSubtree(root->right,subRoot);
}

代码思路

判断子树里是否包含另一棵树,本质还是检查两棵树是否相同,但是需要找到相同树部分的根节点,也就是要先遍历子树节点,找到与subroot->val相同的值,找不到的话就直接返回false,找到后检查是否相同,相同则返回true。但是这里要思考一个情况,当前根节点的值相同,子树不相同,但是子树与subroot根节点相同,如图,当遍历到第一个4的时候,442与412不同,这时候不能直接返回false,因为他的左子树412与subroot相同,因此需要继续向下遍历并检测是否相同,因此在判断root的值是否相同后再以判断是否相同为条件,不相同继续向下遍历,直到检测到NULL。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/477707.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Linux C | 多线程编程】线程的创建、线程ID、线程属性

&#x1f601;博客主页&#x1f601;&#xff1a;&#x1f680;https://blog.csdn.net/wkd_007&#x1f680; &#x1f911;博客内容&#x1f911;&#xff1a;&#x1f36d;嵌入式开发、Linux、C语言、C、数据结构、音视频&#x1f36d; ⏰发布时间⏰&#xff1a;2024-03-22 0…

SSC9211_USB-CAM解决方案

一、方案描述 SSC9211是一种用于USB-CAM应用程序跟场景的高度集成的SOC产品。平台本身基于ARM层-A7双核&#xff0c;内置16位&#xff0c;64M的DDR2&#xff0c;集成了图像传感器接口、高级ISP、高性能JPEG编码器和其他丰富的外设接口。支持单&#xff0c;双 MIPI sensor方案&…

H3C--堆叠(IRF)

拓扑图 配置流程 配置SW1与SW2堆叠 一、SW1&#xff1a; shutdown 物理端口配置堆叠优先级&#xff0c;优先级高的成为主设备创建堆叠逻辑接口&#xff0c;将物理接口加入到堆叠逻辑接口中 二、SW1&#xff1a; sysname SW1 # irf member 1 priority 6 # irf-port 1/1port…

基于时空上下文(STC)的运动目标跟踪算法,Matlab实现

博主简介&#xff1a; 专注、专一于Matlab图像处理学习、交流&#xff0c;matlab图像代码代做/项目合作可以联系&#xff08;QQ:3249726188&#xff09; 个人主页&#xff1a;Matlab_ImagePro-CSDN博客 原则&#xff1a;代码均由本人编写完成&#xff0c;非中介&#xff0c;提供…

windowsVMware虚拟机中扩展linux磁盘空间

1.虚拟磁盘扩容 VM中&#xff0c;关闭linux虚拟机&#xff0c;直接编辑虚拟机-硬盘-扩展磁盘容量 2.通过Gparted工具进行LINUX系统磁盘分区 未分区挂载前可以看到/挂载点下空间为20G&#xff1a; 通过虚拟机-快照-拍摄快照&#xff0c;操作前可拍摄快照&#xff08;便于恢复之前…

科技云报道:造完“大模型”,“具身智能”将引领AI下一个浪潮?

科技云报道原创。 资深机器人专家Eric Jang不久前曾预言&#xff1a;“ChatGPT 曾在一夜之间出现。我认为&#xff0c;有智慧的机器人技术也将如此。” 3月13日深夜&#xff0c;一段人形机器人的视频开始热传。 在视频中&#xff0c;Figure的人形机器人&#xff0c;可以完全…

基于java+springboot+vue实现的健身房管理系统(文末源码+Lw+ppt)23-523

摘 要 健身房管理的以往工作流程繁杂、多样、管理复杂与设备维护繁琐。而如今计算机已完全能够胜任健身房管理工作&#xff0c;而且更加准确、方便、快捷、高效、清晰、透明&#xff0c;它完全可以克服以上所述的不足之处。这将给查询信息和管理带来很大的方便&#xff0c;从…

从0写一个问卷调查APP的第13天-1

1.今日任务 我也只是一个大学生&#xff0c;有什么思路不对的地方给我指出来哟! 分析&#xff1a;上次我们实现了任务调查的插入。但是我们插入的问卷调查只有它的标题&#xff0c;也就是这个问卷调查是什么我们告诉数据库了&#xff0c;但是现在我们还没有给它添加任何问题&…

图片如何去除水印?试试这三款去水印工具!

在处理图片时&#xff0c;经常会遇到一个棘手的问题&#xff1a;水印。不论是想去除不美观的版权标记&#xff0c;还是希望消除图片上的杂物&#xff0c;一个好用的去水印工具都是必不可少的。今天&#xff0c;我们就为大家介绍三款功能强大、操作简便的图片去水印软件&#xf…

JavaScrpt学习笔记_一

一、Js编写位置 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</title> <!-- 可以将js代码编写到外部js文件中&#xff0c;然后通过script标签引入写到外部文件中可以在不同页面中…

梦百合发布“正确睡眠观”,再次呼吁“别睡硬床”

3月21日“世界睡眠日”当天,MLILY梦百合召开了主题为“别睡硬床”的品牌发布会,梦百合家居董事长倪张根发布了一场线上主题演讲,普及睡硬床可能带来的危害,呼吁国人“别睡硬床!”,并发布“100万张硬床垫改造计划”,期望消费者通过从体验一张薄垫开始,从而逐步认识到睡硬床的危害…

1.C#对接微信Native支付(接入前准备)

在申请微信支付商户和微信公众号成功后&#xff0c;我们需要根据官方文档继续进行下一步操作。 1.申请appid和申请mchid 其实只要申请了支付商户和公众号那么这两个id就已经生成了。 我们在公众号管理端的微信支付中可以看到appid 在微信支付商户管理端中可以看到mchid 2…

20240316-1-向量化搜索

向量化搜索 在高维空间内快速搜索最近邻&#xff08;Approximate Nearest Neighbor&#xff09;。召回中&#xff0c;Embedding向量的搜索。 FAISS、kd-tree、局部敏感哈希、【Amnoy、HNSW】 FAISS faiss是Facebook的AI团队开源的一套用于做聚类或者相似性搜索的软件库&…

图中的边关系和节点关系之间的转换

图中的边关系和节点关系之间的转换 边关系转为图 在relation数组中记录的是从一个节点到一个节点&#xff0c;前面的就叫做from&#xff0c;后面的就叫做to&#xff0c;因此每次添加进节点关系的数组的时候&#xff0c;from就是数组索引&#xff0c;to就是需要加入的值。也就是…

揭秘最热门AI写作软件,看看有哪些值得推荐的AI写作神器

在快节奏的现代生活中&#xff0c;我们常常面临各种压力&#xff0c;例如工作、学习等。因此&#xff0c;一款能够提高写作效率的工具变得尤为重要。那么&#xff0c;有没有什么AI写作软件是比较好用的呢&#xff1f;下面小编给大家推荐几款热门的写作软件。 一.爱制作AI写作 …

打造稳定高效的会员系统:技术架构解析与优化策略

随着互联网时代的发展和用户需求的变化&#xff0c;会员系统成为了各行各业企业实现用户粘性和增长的重要手段。一个稳定高效的会员系统架构能够帮助企业更好地管理会员数据、提供个性化服务和增加用户价值。本文将深入探讨会员系统的技术架构&#xff0c;分析其重要性和挑战&a…

Transformer的前世今生 day02(神经网络语言模型、词向量)

神经网络语言模型 使用神经网络的方法&#xff0c;去完成语言模型的两个问题&#xff0c;下图为两层感知机的神经网络语言模型&#xff1a; 假设词典V内有五个词&#xff1a;“判断”、“这个”、“词”、“的”、“词性”&#xff0c;且要输出P(w_next | “判断”、“这个”、…

Linux东方通下载及使用

把压缩包拖进去 解压文件 mkdir /usr/local/java

新品发布 | Ftrans FIE文件安全导入导出系统

关于飞驰云联 飞驰云联是中国领先的数据安全传输解决方案提供商&#xff0c;长期专注于安全可控、性能卓越的数据传输技术和解决方案&#xff0c;公司产品和方案覆盖了跨网跨区域的数据安全交换、供应链数据安全传输、数据传输过程的防泄漏、FTP的增强和国产化替代、文件传输自…

加速您的 AI 开发:NVIDIA AI Workbench 正式发布

加速您的 AI 开发&#xff1a;NVIDIA AI Workbench 正式发布 NVIDIA AI Workbench 是一款面向 AI 和 ML 开发人员的工具包&#xff0c;现已普遍提供免费下载。 它具有自动化功能&#xff0c;可以消除新手开发人员的障碍并提高专家的工作效率。 无论技能水平如何&#xff0c;开…