当前位置: 首页 > news >正文

Leetcode-二叉树oj题

1.二叉树的前序遍历 

144. 二叉树的前序遍历icon-default.png?t=N7T8https://leetcode.cn/problems/binary-tree-preorder-traversal/这个题目在遍历的基础上还要求返回数组,数组里面按前序存放二叉树节点的值。

既然要返回数组,就必然要malloc一块空间,那么我们需要算出这个二叉树的节点个数,所以就创建一个函数TreeSize求出节点个数。TreeSize的实现在上篇文章有提到http://t.csdnimg.cn/izhvv

 所以在preorderTraversal里面创建一个变量n来接收TreeSize的返回值,再为变量amalloc一块空间,空间大小是n个int。这个时候就要考虑如何存放前序的值,写一个函数PrevOrder,参数是头指针root,数组a,指针变量pi,进入函数首先判断当前节点是否为空,如果是空则返回,不是空则开始存值,将root->val存在a[*pi]这个位置,然后(*pi)++,然后就是递归左右子树。在preorderTraversal内部创建变量i,&i作为PrevOrder参数,再将*returnsize=n,最后返回数组a即可。

int TreeSize(struct TreeNode* root)
{return root==NULL?0:TreeSize(root->left)+TreeSize(root->right)+1;
}
void PrevOrder(struct TreeNode* root,int* a,int* pi)
{if(root==NULL)return ;a[(*pi)++]=root->val;PrevOrder(root->left,a,pi);PrevOrder(root->right,a,pi);
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) 
{int n=TreeSize(root);int* a=(int*)malloc(sizeof(int)*n);int i=0;PrevOrder(root,a,&i);*returnSize=n;return a;
}

 2.判断两棵树是否相同

100. 相同的树icon-default.png?t=N7T8https://leetcode.cn/problems/same-tree/

 首先判断这两棵树是否都是空树,如果都是空树则return true,如果没有返回true则说明有以下情况:1.p==NULL,q!=NULL. 2.p!=NULL,q==NULL. 3.q!=NULL,p!=NULL.下一步就是判断,既然有一棵树为NULL,那么如果另一棵树不为NULL,则返回false,巧妙地利用||逻辑运算符,因为已知走到这一步至少有一棵树不为NULL,所以两个条件至少有一个不成立,||运算符是有一个成立则成立,所以如果另一棵树为NULL则返回false,那么现在只剩下一种情况,两棵树都不为空。这个时候判断当前两棵树的节点的值是否相同即可,如果不相等则返回false。最后递归左右子树,这里需要注意的是,如果左树已经不相同而返回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->val!=p->val)return false;return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);}

3.判断一棵树是否为另一棵树的子树

572. 另一棵树的子树icon-default.png?t=N7T8https://leetcode.cn/problems/subtree-of-another-tree/

 这里我们可以拷贝上一题的代码,判断是否树相同。首先判断root这棵树是否为空树,如果是空树则返回false。再判断root的值val是否与subRoot的值val相同,如果相同则使用isSameTree判断从当前节点开始两棵树是否相同,如果相同则返回true。最后递归判断一下root的左子树和右子树,这里可以使用||逻辑运算符,因为无论是左边还是右边,有一边中的子树和subRoot相同即可。

bool isSameTree(struct TreeNode* p, struct TreeNode* q)
{//都为空if (p == NULL & q == NULL)return true;//其中一个为空if (p == NULL || q == NULL)return false;if (q->val != p->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);
}

 今天的分享到这里就结束了,感谢大家的阅读!

相关文章:

Leetcode-二叉树oj题

1.二叉树的前序遍历 144. 二叉树的前序遍历https://leetcode.cn/problems/binary-tree-preorder-traversal/这个题目在遍历的基础上还要求返回数组,数组里面按前序存放二叉树节点的值。 既然要返回数组,就必然要malloc一块空间,那么我们需…...

软件磁盘阵列(software RAID)

RAID-0 等量模式(各个磁盘平均存放文件) RAID-1 镜像模式(一个文件存放两个磁盘) RAID 01 RAID 10 组合模式 RAID 5 三块以上磁盘,记录文件和同位码(存放不通磁盘,通过同…...

浏览器安全攻击与防御

前言 浏览器是我们访问互联网的主要工具,也是我们接触信息的主要渠道。但是,浏览器也可能成为攻击者利用的突破口,通过各种手段,窃取或篡改我们的数据,甚至控制我们的设备.本文将向大家介绍一些常见的浏览器安全的攻击…...

vue生命周期、工程化开发和脚手架

1、前言 持续学习记录总结中,vue生命周期、工程化开发和脚手架 2、Vue生命周期 Vue生命周期:就是一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个阶段:① 创建 ② 挂载 ③ 更新 ④ 销毁 1.创建阶段:创建响应式数据 2.挂…...

文件搜索工具HoudahSpot mac中文版特点

HoudahSpot mac是一款文件搜索工具,它可以帮助用户快速准确地找到文件和文件夹,支持高级搜索和过滤,同时提供了多种视图和操作选项,方便用户进行文件管理和整理。 HoudahSpot mac软件特点 高级搜索和过滤功能:软件支持…...

maven中scope和optional区别

文章目录 1. Scope&#xff08;作用范围&#xff09;&#xff1a;2. Optional&#xff08;可选项&#xff09;&#xff1a; 1. Scope&#xff08;作用范围&#xff09;&#xff1a; Maven的<scope>元素用于指定依赖项的作用范围&#xff0c;即依赖项在构建和运行时的可见…...

《ChatGPT实操应用大全》探索无限可能

&#x1f5e3;️探索ChatGPT&#xff0c;开启无限可能&#x1f680; 文末有免费送书福利&#xff01;&#xff01;&#xff01; ChatGPT是人类有史以来最伟大的发明。他能写作、绘画、翻译、看病、做菜、编程、数据分析、制作视频、解高等数学题…&#xff0c;他会的技能…...

基于helm的方式在k8s集群中部署gitlab - 部署(一)

文章目录 1. 背景说明2. 你可以学到什么&#xff1f;3. 前置条件4. 安装docker服务&#xff08;所有节点&#xff09;5. 部署k8s集群5.1 系统配置&#xff08;所有节点&#xff09;5.2 安装kubelet组件(所有节点)5.2.1 编写kubelet源5.2.2 安装kubelet5.2.3 启动kubelet 5.3 集…...

flask web开发学习之初识flask(二)

文章目录 一、创建程序实例并注册路由1. 为视图绑定绑定多个URL2. 动态URL 二、启动开发服务器1. 自动发现程序实例2. 管理环境变量3. 使用pycharm运行服务器4. 更多的启动选项5. 设置运行环境6. 调试器7. 重载器 一、创建程序实例并注册路由 app.py # 从flask包中导入flask类…...

利用异或、取反、自增bypass_webshell_waf

目录 引言 利用异或 介绍 eval与assert 蚁剑连接 进阶题目 利用取反 利用自增 引言 有这样一个waf用于防御我们上传的文件&#xff1a; function fun($var): bool{$blacklist ["\$_", "eval","copy" ,"assert","usort…...

K8s Docker实践三

单主机创建多个node 在Mac桌面上部署多个Kubernetes节点可以使用Minikube工具。Minikube是一个轻量级的Kubernetes工具&#xff0c;它可以在单个主机上创建一个虚拟集群。以下是在Mac桌面上使用Minikube部署多个Kubernetes节点的步骤&#xff1a; 安装Minikube&#xff0c;运…...

记录 | pip加速配置

以下方法不仅适用于linux&#xff0c;也适用于mac 临时加速配置&#xff1a; pip install -i https://pypi.douban.com/simple --trusted-host pypi.douban.com matplotlib3.4.0其中可选源有&#xff1a; https://pypi.douban.com/simple http://mirrors.aliyun.com/pypi/sim…...

HarmonyOS开发—Arkts循环渲染(ForEach)深入运用详解【鸿蒙专栏-16】

文章目录 ArkTS ForEach接口详解与应用示例ForEach接口概述介绍接口描述参数说明键值生成规则默认规则组件创建规则首次渲染非首次渲染使用场景高级用法条件渲染逻辑LazyForEach的性能优化渲染结果预期ForEach的错误使用案例与性能降低渲染结果非预期渲染性能降低结语ArkTS For…...

uniapp挽留提示2.0

项目需求&#xff1a;有时候挽留的ui是全屏的&#xff0c;用page-container也可以。后来产品提了个问题&#xff0c;手机侧滑的时候没那么顺畅&#xff08;就是一用侧滑&#xff0c;就显示出来&#xff0c;产品要的方案是如下图&#xff0c;emmm大概是这个意思&#xff09; 后面…...

电源控制系统架构(PCSA)之系统分区电压域

目录 4.1 电压域 4.1.1 系统逻辑 4.1.2 Always-On逻辑 4.1.3 处理器Clusters 4.1.4 图形处理器 4.1.5 其他功能 4.1.6 SoC分区示例 本章描述基于Arm组件的SoC划分为电压域和电源域。 所描述的选择并不详尽&#xff0c;只是可能性的一个子集。目的是描述基于Arm组件的SoC…...

[Linux] 正则表达式及grep和awk

一、正则表达式 1.1 什么是正则表达式 正则表达式是一种用于匹配和操作文本的强大工具&#xff0c;它是由一系列字符和特殊字符组成的模式&#xff0c;用于描述要匹配的文本模式。 正则表达式可以在文本中查找、替换、提取和验证特定的模式。 正则表达式和通配符的区别 正则…...

ssm+java车辆售后维护系统 springboot汽车保养养护管理系统+jsp

以前汽车维修人员只是在汽车运输行业中从事后勤保障工作,随着我国经济的发展,汽车维修行业已经从原来的从属部门发展成了如今的功能齐备的独立企业。这种结构的转变,给私营汽修企业和个体汽修企业的发展带来了契机,私营企业和个体维修企业的加入也带动了整个汽修行业的整体水平…...

HNU练习七 字符串编程题7. 机器人游戏

【问题描述】 有人建造了一些机器人&#xff0c;并且将他们放置在包含n个单元的一维网格上&#xff0c;一个长度为n的字符串s代表了他们的编排方式&#xff0c;字符串中的字符既可以是.&#xff0c;也可以是0~9之间的一个数字字符&#xff0c;字符.表示开始时在相应的单元上无机…...

【Linux】bash 终端指令

bash # 查看当前使用的shell $ echo $SHELL /bin/bash# 查看当前发行版可以使用的shell $ cat /etc/shells 或 chsh -l /bin/sh /bin/bash /sbin/nologin /bin/zsh /bin/tcsh /bin/csh# 切换bash $ chsh -s /bin/bash# 切换zsh $ chsh -s /bin/zsh进程 $ ps aux | grep pwd w…...

基于SpringBoot高校心理教育辅导设计与实现

摘 要 随着Internet技术的发展&#xff0c;心理教育辅导系统应运而生&#xff0c;心理教育辅导系统为用户提供了一个更为便利的心理测试咨询平台。所以&#xff0c;为了充分满足高校学生心理教育辅导的需求&#xff0c;特开发了本高校心理教育辅导系统。 本高校心理教育辅导系统…...

多云管理“拦路虎”:深入解析网络互联、身份同步与成本可视化的技术复杂度​

一、引言&#xff1a;多云环境的技术复杂性本质​​ 企业采用多云策略已从技术选型升维至生存刚需。当业务系统分散部署在多个云平台时&#xff0c;​​基础设施的技术债呈现指数级积累​​。网络连接、身份认证、成本管理这三大核心挑战相互嵌套&#xff1a;跨云网络构建数据…...

8k长序列建模,蛋白质语言模型Prot42仅利用目标蛋白序列即可生成高亲和力结合剂

蛋白质结合剂&#xff08;如抗体、抑制肽&#xff09;在疾病诊断、成像分析及靶向药物递送等关键场景中发挥着不可替代的作用。传统上&#xff0c;高特异性蛋白质结合剂的开发高度依赖噬菌体展示、定向进化等实验技术&#xff0c;但这类方法普遍面临资源消耗巨大、研发周期冗长…...

SpringBoot+uniapp 的 Champion 俱乐部微信小程序设计与实现,论文初版实现

摘要 本论文旨在设计并实现基于 SpringBoot 和 uniapp 的 Champion 俱乐部微信小程序&#xff0c;以满足俱乐部线上活动推广、会员管理、社交互动等需求。通过 SpringBoot 搭建后端服务&#xff0c;提供稳定高效的数据处理与业务逻辑支持&#xff1b;利用 uniapp 实现跨平台前…...

Springcloud:Eureka 高可用集群搭建实战(服务注册与发现的底层原理与避坑指南)

引言&#xff1a;为什么 Eureka 依然是存量系统的核心&#xff1f; 尽管 Nacos 等新注册中心崛起&#xff0c;但金融、电力等保守行业仍有大量系统运行在 Eureka 上。理解其高可用设计与自我保护机制&#xff0c;是保障分布式系统稳定的必修课。本文将手把手带你搭建生产级 Eur…...

12.找到字符串中所有字母异位词

&#x1f9e0; 题目解析 题目描述&#xff1a; 给定两个字符串 s 和 p&#xff0c;找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义&#xff1a; 若两个字符串包含的字符种类和出现次数完全相同&#xff0c;顺序无所谓&#xff0c;则互为…...

SpringCloudGateway 自定义局部过滤器

场景&#xff1a; 将所有请求转化为同一路径请求&#xff08;方便穿网配置&#xff09;在请求头内标识原来路径&#xff0c;然后在将请求分发给不同服务 AllToOneGatewayFilterFactory import lombok.Getter; import lombok.Setter; import lombok.extern.slf4j.Slf4j; impor…...

SpringTask-03.入门案例

一.入门案例 启动类&#xff1a; package com.sky;import lombok.extern.slf4j.Slf4j; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.cache.annotation.EnableCach…...

Element Plus 表单(el-form)中关于正整数输入的校验规则

目录 1 单个正整数输入1.1 模板1.2 校验规则 2 两个正整数输入&#xff08;联动&#xff09;2.1 模板2.2 校验规则2.3 CSS 1 单个正整数输入 1.1 模板 <el-formref"formRef":model"formData":rules"formRules"label-width"150px"…...

均衡后的SNRSINR

本文主要摘自参考文献中的前两篇&#xff0c;相关文献中经常会出现MIMO检测后的SINR不过一直没有找到相关数学推到过程&#xff0c;其中文献[1]中给出了相关原理在此仅做记录。 1. 系统模型 复信道模型 n t n_t nt​ 根发送天线&#xff0c; n r n_r nr​ 根接收天线的 MIMO 系…...

华硕a豆14 Air香氛版,美学与科技的馨香融合

在快节奏的现代生活中&#xff0c;我们渴望一个能激发创想、愉悦感官的工作与生活伙伴&#xff0c;它不仅是冰冷的科技工具&#xff0c;更能触动我们内心深处的细腻情感。正是在这样的期许下&#xff0c;华硕a豆14 Air香氛版翩然而至&#xff0c;它以一种前所未有的方式&#x…...