二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)
讲了这么多数据结构相关的知识(可以看我的数据结构文章专栏):
抓紧刷题巩固一下了
目录
1.单值二叉树
题目描述
思路1
代码1
思路2
代码2
2.相同的树
题目描述
思路
代码
3.二叉树的前序遍历
代码
思路
1.单值二叉树
965. 单值二叉树 - 力扣(LeetCode)
题目描述

思路1
利用递归:
首先检查根与左右节点的值是否相等,如果不相等就能直接返回false ,都一样就依次进入左右子树开始检查子树。
对于每个节点,它会检查其左子节点和右子节点的值是否与当前节点的值相同,如果不同则返回 false。如果左右子树都满足条件,则继续递归地检查左子树和右子树
递归的终止条件是当遍历到叶子节点时,此时返回 true
代码1
bool isUnivalTree(struct TreeNode* root) {if(root==NULL)return true;if(root->left!=NULL&&root->left->val!=root->val){return false;}if(root->right!=NULL&&root->right->val!=root->val){return false;}return isUnivalTree(root->left)&&isUnivalTree(root->right);
}

思路2
首先检查根节点是否为空,如果为空则直接返回 true
然后,代码会递归地检查左子树和右子树。对于每个节点,它会检查其左子节点和右子节点的值是否与当前节点的值相同,如果不同则返回 false。同时,它也会递归地检查左子树和右子树是否为unival树(一旦不满足条件,直接返回false)
满足了就走到最后,返回true
代码2
bool isUnivalTree(struct TreeNode* root) {if(root==NULL)//看根{return true;}if(root->left)//左子树不为空就先看左子树符合否{if(root->left->val!=root->val||!isUnivalTree(root->left))return false;}if(root->right)//右子树不为空{if(root->right->val!=root->val||!isUnivalTree(root->right))return false;}return true;
}
2.相同的树
100. 相同的树 - 力扣(LeetCode)
题目描述

思路
先根和根比,比完再比左子树和右子树
1. 两者都是空时也相等
2. 左节点或右节点一个存在一个不存在返回false;都存在不相等也是false
3.开始递归,都是NULL时返回true或者返回false停止
代码
bool isSameTree(struct TreeNode* p, struct TreeNode* q) {if(p==NULL&&q==NULL){return true;}if(p==NULL&&q!=NULL){return false;}if(q==NULL&&p!=NULL){return false;}if(p->val!=q->val){return false;}bool left= isSameTree(p->left,q->left);bool right= isSameTree(p->right,q->right);return left&&right;
}

3.二叉树的前序遍历
144. 二叉树的前序遍历 - 力扣(LeetCode)
代码
int TreeSize(struct TreeNode* root)
{return root == NULL ? 0 : 1 + TreeSize(root->left) + TreeSize(root->right);
}void preorder(struct TreeNode* root, int* a, int* i)
{if (root == NULL){return;}a[*i] = root->val;(*i)++;preorder(root->left, a, i);preorder(root->right, a, i);
}int* preorderTraversal(struct TreeNode* root, int* returnSize) {int n = TreeSize(root);*returnSize=n;int* a=(int*)malloc(sizeof(int)*n);int i=0;preorder(root,a,&i);return a;
}
思路
1.首先题目要求放到malloced的数组里,那就要考虑大小的问题,最后还是运用TreeSize来求一下树里元素的数量比较好,求出来后直接赋值给*returnsize
2.一般使用递归,但是我们已经在函数里面动态开辟了,递归每次调用会消耗很多,最好的办法还是在构建一个函数来进行前置遍历和放入的操作。
3.考虑到参数设置问题,root要有,数组a也要有。那想到需要一个下标才能确保递归时正确放到位置,这个下标还不能在递归函数里面定义,那样没用(都是新的,独立的变量)。
所以要作为参数传入的同时还能保证递归时改变的都是同一个变量那就有两种方法:
- 全局变量
- 传入地址:地址虽然也是临时拷贝,但是都是指向同一块区域
相关文章:
二叉树基础oj练习(单值二叉树、相同的树、二叉树的前序遍历)
讲了这么多数据结构相关的知识(可以看我的数据结构文章专栏): 抓紧刷题巩固一下了 目录 1.单值二叉树 题目描述 思路1 代码1 思路2 代码2 2.相同的树 题目描述 思路 代码 3.二叉树的前序遍历 代码 思路 1.单值二叉树 965. 单值二叉树 - 力扣(LeetCod…...
自动化创建ETX用户帐号
在芯片设计行业,ETX是常见的远程访问环境。用户在通过ETX访问远程环境前必须首先加入ETX系统,然后通过profile分配相关的环境的访问权限。 通常这些操作在ETX WEB页面手工操作,如果我们期望实现用户帐号注册全自动化,就需要将以上…...
Android 实现集合去重的方法
方法一:使用HashSet 将集合转换为HashSet。 Set<String> set new HashSet<>(list);将HashSet转换回List。 List<String> uniqueList new ArrayList<>(set);方法二:使用Java 8的Stream API 将列表转换为Stream。 Stream&l…...
【Vue3】2-12 : 【案例】搜索关键词加筛选条件的综合
本书目录:点击进入 一、【案例】搜索关键词加筛选条件的综合 1.1、逻辑 1.2、效果 1.3、json数据 - 02-data.json 1.4、代码 一、【案例】搜索关键词加筛选条件的综合 1.1、逻辑 计算属性 - 绑定list,并过滤 input 双向绑定 - 当input改变时&…...
unity小程序websocket:nginx配置https (wss)转http (ws)及其他问题解决
目录 前言 实际运用场景 处理流程如下 nginx配置ssl和wss 配置过程中遇到的问题 1、无法连接服务器 2、通过IP可以访问,域名却不行 问题描述 解决 3、如何判断该域名是否备案了 前言 为了服务器网络的通用性,我们在实现移动端的游戏转微信小程序…...
MySql数据库对接Orcal数据库,需要考虑的前提问题
1.主表 从表的表关系;主键id 的关联问题; 2.字段类型的一致性问题(备注:像varchar类型的一点要谨防数据过长抛错); 3.实体类字段两表一致性问题; 4.入表不为空问题,判空尽量在实体…...
K8S的存储卷---数据卷
容器内的目录和宿主机的目录进行挂载 容器在系统上的生命周期是短暂的。delete,K8S用控制器创建的pod,delete相当于重启,容器的状态也会恢复到初始状态。一旦回到初始状态,所有的后天编辑的文件都会消失 容器和节点之间创建一个…...
【量化交易故事】小明开启了量化创业之旅-01
故事开始于2023年的春天,小明是一位对金融市场充满热情的IT工程师。在经历了数次基于主观判断和个人情绪进行投资却收获平平后,他意识到传统交易方式中的人为因素难以避免,而这往往成为影响投资决策稳定性和准确性的关键障碍。在一次偶然的机…...
ffmpeg写YUV420文件碰到阶梯型横线或者条纹状画面的原因和解决办法
版权声明:本文为CSDN博主「文三~」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。 原文链接:https://blog.csdn.net/asdasfdgdhh/article/details/112831581 看到了,转载,留着备份…...
案例:新闻数据加载
文章目录 介绍相关概念相关权限约束与限制完整示例 代码结构解读构建主界面数据请求下拉刷新总结 介绍 本篇Codelab是基于ArkTS的声明式开发范式实现的样例,主要介绍了数据请求和touch事件的使用。包含以下功能: 数据请求。列表下拉刷新。列表上拉加载…...
数学的雨伞下:理解世界的乐趣
这本书没有一个公式,却讲透了数学的本质! 《数学的雨伞下:理解世界的乐趣》。一本足以刷新观念的好书,从超市到对数再到相对论,娓娓道来。对于思维空间也给出了一个更容易理解的角度。 作者:米卡埃尔•洛奈…...
补充 vue3用户管理权限(路由控制)
之前有人问我 ,如果是二级路由如何添加,这里我做一个补充吧。直接拿方法去用就行。也不做解释了。稍微看下就能看懂了 假设,后端返回给我们一个数据 [“/defa”,"/defa/defa1"] 这样的一个路由表,我们就需要通过这个路…...
C++ 深度优先搜索DFS || 模版题:排列数字
给定一个整数 n ,将数字 1∼n 排成一排,将会有很多种排列方法。 现在,请你按照字典序将所有的排列方法输出。 输入格式 共一行,包含一个整数 n 。 输出格式 按字典序输出所有排列方案,每个方案占一行。 数据范围 1…...
计算机找不到msvcp120.dll如何解决?总结五个可靠的教程
在计算机使用过程中,遇到“找不到msvcp120.dll”这一问题常常令人困扰。msvcp120.dll作为Windows系统中至关重要的动态链接库文件,对于许多应用程序的正常运行起着不可或缺的作用。那么,究竟是什么原因导致找不到msvcp120.dll呢?又…...
法线变换矩阵的推导
背景 在冯氏光照模型中,其中的漫反射项需要我们对法向量和光线做点乘计算。 从顶点着色器中读入的法向量数据处于模型空间,我们需要将法向量转换到世界空间,然后在世界空间中让法向量和光线做运算。这里便有一个问题,如何将法线…...
React.Children.map 和 js 的 map 有什么区别?
JavaScript 中的 map 不会对为 null 或者 undefined 的数据进行处理,而 React.Children.map 中的 map 可以处理 React.Children 为 null 或者 undefined 的情况。 React 空节点:可以由null、undefined、false、true创建 import React from reactexport …...
13.Kubernetes部署Go应用完整流程:从Dockerfile到Ingress发布完整流程
本文以一个简单的Go应用Demo来演示Kubernetes应用部署的完整流程 1、Dockerfile多阶段构建 Dockerfile多阶段构建 [root@docker github]# git clone https://gitee.com/yxydde/http-dump.git [root@docker github]# cd http-dump/ [root@docker http-dump]# cat Dockerfile …...
叉车车载终端定制_基于MT6762安卓核心板的车载终端设备方案
叉车车载终端是一款专为叉车车载场景设计的4英寸Android车载平板电脑。它采用了高能低耗的8核ARM架构处理器和交互开放的Android 12操作系统,算力表现强大。此外,该产品还具备丰富的Wi-Fi-5、4G LTE和蓝牙等通讯功能,可选配外部车载蘑菇天线&…...
【CSS】保持元素宽高比
保持元素的宽高比,在视频或图片展示类页面是一个重要功能。 本文介绍其常规的实现方法。 实现效果 当浏览器视口发生变化时,元素的尺寸随之变化,且宽高比不变。 代码实现 我们用最简单的元素结构来演示,实现宽高比为4…...
使用 Docker 和 Diffusers 快速上手 Stable Video Diffusion 图生视频大模型
本篇文章聊聊,如何快速上手 Stable Video Diffusion (SVD) 图生视频大模型。 写在前面 月底计划在机器之心的“AI技术论坛”做关于使用开源模型 “Stable Diffusion 模型” 做有趣视频的实战分享。 因为会议分享时间有限,和之前一样,比较简…...
利用最小二乘法找圆心和半径
#include <iostream> #include <vector> #include <cmath> #include <Eigen/Dense> // 需安装Eigen库用于矩阵运算 // 定义点结构 struct Point { double x, y; Point(double x_, double y_) : x(x_), y(y_) {} }; // 最小二乘法求圆心和半径 …...
智慧工地云平台源码,基于微服务架构+Java+Spring Cloud +UniApp +MySql
智慧工地管理云平台系统,智慧工地全套源码,java版智慧工地源码,支持PC端、大屏端、移动端。 智慧工地聚焦建筑行业的市场需求,提供“平台网络终端”的整体解决方案,提供劳务管理、视频管理、智能监测、绿色施工、安全管…...
最新SpringBoot+SpringCloud+Nacos微服务框架分享
文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...
MODBUS TCP转CANopen 技术赋能高效协同作业
在现代工业自动化领域,MODBUS TCP和CANopen两种通讯协议因其稳定性和高效性被广泛应用于各种设备和系统中。而随着科技的不断进步,这两种通讯协议也正在被逐步融合,形成了一种新型的通讯方式——开疆智能MODBUS TCP转CANopen网关KJ-TCPC-CANP…...
【论文阅读28】-CNN-BiLSTM-Attention-(2024)
本文把滑坡位移序列拆开、筛优质因子,再用 CNN-BiLSTM-Attention 来动态预测每个子序列,最后重构出总位移,预测效果超越传统模型。 文章目录 1 引言2 方法2.1 位移时间序列加性模型2.2 变分模态分解 (VMD) 具体步骤2.3.1 样本熵(S…...
视频行为标注工具BehaviLabel(源码+使用介绍+Windows.Exe版本)
前言: 最近在做行为检测相关的模型,用的是时空图卷积网络(STGCN),但原有kinetic-400数据集数据质量较低,需要进行细粒度的标注,同时粗略搜了下已有开源工具基本都集中于图像分割这块,…...
Selenium常用函数介绍
目录 一,元素定位 1.1 cssSeector 1.2 xpath 二,操作测试对象 三,窗口 3.1 案例 3.2 窗口切换 3.3 窗口大小 3.4 屏幕截图 3.5 关闭窗口 四,弹窗 五,等待 六,导航 七,文件上传 …...
GO协程(Goroutine)问题总结
在使用Go语言来编写代码时,遇到的一些问题总结一下 [参考文档]:https://www.topgoer.com/%E5%B9%B6%E5%8F%91%E7%BC%96%E7%A8%8B/goroutine.html 1. main()函数默认的Goroutine 场景再现: 今天在看到这个教程的时候,在自己的电…...
MyBatis中关于缓存的理解
MyBatis缓存 MyBatis系统当中默认定义两级缓存:一级缓存、二级缓存 默认情况下,只有一级缓存开启(sqlSession级别的缓存)二级缓存需要手动开启配置,需要局域namespace级别的缓存 一级缓存(本地缓存&#…...
HTML前端开发:JavaScript 获取元素方法详解
作为前端开发者,高效获取 DOM 元素是必备技能。以下是 JS 中核心的获取元素方法,分为两大系列: 一、getElementBy... 系列 传统方法,直接通过 DOM 接口访问,返回动态集合(元素变化会实时更新)。…...
