正餐---二叉树的OJ题


目录​​​​​​​

前言🍯

1. 检查两颗树是否相同🥇

1.1 思路分析🪙

1.2 代码实现🧰

2. 单值二叉树🌲

2.1 思路分析🔮

2.2 代码实现💈

3. 二叉树的前序遍历🎟️

3.1 思路分析🕰️

3.2 代码实现💸

4. 翻转二叉树🏎️

4.1 思路分析💷

4.2 代码实现🛠️

5. 另一颗树的子树🚂

5.1 思路分析🛡️

5.2 代码实现🎐

 6.二叉树的构建及遍历🚃

7. 对称二叉树🚧

7.1 思路分析🧧

7.2 代码实现📆

8. 判断一颗二叉树是否是平衡二叉树🚦

8.1 思路分析🎁

8.2 代码实现🛍️

课后作业🍭

1.二叉树的后序遍历🩸

2.二叉树的中序遍历💎

 3. 二叉树最大深度🍩

3.1 思路分析

后语🍰


前言🍯

Hey,guys!又见面了,还记得上篇博客,我们干了什么吗?没错👍,我们对二叉树和堆排序相关的知识点进行了巩固复习。今天,我们的主要任务就是对递归有更深的理解,可以更好地运用递归的思想。今天主要就是二叉树的oj题。

废话不多说,我们进行今天的学习!!!


1. 检查两颗树是否相同🥇

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

1.1 思路分析🪙


1.2 代码实现🧰

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 isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);//2个都相同才返回trueelse//不相同return false;    
}

2. 单值二叉树🌲

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

2.1 思路分析🔮


2.2 代码实现💈

 bool isSameNode(struct TreeNode* root,int data){if(root==NULL)return true;if(root->val!=data)return false;return isSameNode(root->left,data)&&isSameNode(root->right,data);//左右都要比较(每个节点都要比较)}
bool isUnivalTree(struct TreeNode* root) {int data=root->val;return isSameNode(root,data);
}

3. 二叉树的前序遍历🎟️

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

3.1 思路分析🕰️

此题需要保存节点,所以需要先获取节点个数,然后进行前序遍历,保存每一个节点值。

这也是为什么要有这道题,前序遍历的实现之前见过了,忘记的小伙伴再去看看吧。

3.2 代码实现💸

 //节点个数 = 左右子树节点个数 + 1int BzSize(struct TreeNode* root){if(root==NULL)return 0;return BzSize(root->left)+BzSize(root->right)+1;}//前序遍历+保存
void ProeOrder(struct TreeNode* root,int* a,int* pi)
{if(root){a[(*pi)++]=root->val;ProeOrder(root->left,a,pi);ProeOrder(root->right,a,pi);}
}
int* preorderTraversal(struct TreeNode* root, int* returnSize) {int* a,i=0;*returnSize=BzSize(root);a=(int*)malloc(sizeof(int)*(*returnSize));ProeOrder(root,a,&i);return a;
}

4. 翻转二叉树🏎️

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

4.1 思路分析💷


4.2 代码实现🛠️

 void ChangeNode(struct TreeNode* root)
{if(root==NULL)return;struct TreeNode* tmp=root->left;root->left=root->right;root->right=tmp;//每一个节点都要交换ChangeNode(root->left);ChangeNode(root->right);
}
struct TreeNode* invertTree(struct TreeNode* root) {ChangeNode(root);return root;
}

5. 另一颗树的子树🚂

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

5.1 思路分析🛡️


5.2 代码实现🎐

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  isSameTree(p->left, q->left)&& isSameTree(p->right, q->right);elsereturn false;
}bool isSubtree(struct TreeNode* s, struct TreeNode* t){     if(s == NULL)return false;//根相同,判断当前这个树是否和t相同if(isSameTree(s, t))return true;return isSubtree(s->left, t)|| isSubtree(s->right, t);
}

 6.二叉树的构建及遍历🚃

​​​​​​二叉树遍历_牛客题霸_牛客网

#include <stdio.h>
#include<stdlib.h>
typedef struct TreeNode{char* val;struct TreeNode* left;struct TreeNode* right;
}TNode;
//创建二叉树
TNode* CreateTree(char* str,int* pi)
{if(str[*pi]!='#'){//当前节点非空,则创建当前节点TNode* root=(TNode*)malloc(sizeof(TNode));root->val=str[(*pi)++];//创建左子树root->left=CreateTree(str,pi);(*pi)++;//创建右子树root->right=CreateTree(str,pi);return root;}else {return NULL;}
}
//中序遍历
void InOrder(TNode* root){if(root==NULL)return;InOrder(root->left);printf("%c ",root->val);InOrder(root->right);
}
int main() {char str[101];int i=0;//读入字符串scanf("%s",str);//创建二叉树TNode* root=CreateTree(str,&i);//中序遍历输出InOrder(root);return 0;
}

7. 对称二叉树🚧

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

7.1 思路分析🧧


7.2 代码实现📆

bool _isSymmetric(struct TreeNode* left,struct TreeNode* right){if(left==NULL&&right==NULL)return true;if(left==NULL||right==NULL)return false;if(left->val==right->val)return _isSymmetric(left->left,right->right)&&_isSymmetric(left->right,right->left);elsereturn false;
}
bool isSymmetric(struct TreeNode* root) {return _isSymmetric(root->left,root->right);
}

8. 判断一颗二叉树是否是平衡二叉树🚦

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

8.1 思路分析🎁


8.2 代码实现🛍️

 int TreeHight(struct TreeNode* root){return root==NULL?0:fmax(TreeHight(root->left),TreeHight(root->right))+1;}bool _isBalanced(struct TreeNode* root){if(root==NULL)return true;int h1=TreeHight(root->left);int h2=TreeHight(root->right);if(abs(h1-h2)>1)return false;return _isBalanced(root->left)&&_isBalanced(root->right);}
bool isBalanced(struct TreeNode* root) {if(root==NULL)return true;return _isBalanced(root);
}

----课后作业🍭

1.二叉树的后序遍历🩸

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

2.二叉树的中序遍历💎

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

 3. 二叉树最大深度🍩

力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台

3.1 思路分析

二叉树的 最大深度 是指从根节点到最远叶子节点的最长路径上的节点数。

可以理解就是求高度h


后语🍰

本次我们完成了一些二叉树的oj练习题,我也给大家留了一些课后作业,有需要的小伙伴可以自己点击链接去练习,希望今天的题目让大家对递归有了更好的运用!!!

下一篇博客,我们将一起学习排序的相关知识点!请大家多多期待🙏


本次的分享到这里就结束了!!

PS:小江目前只是个新手小白。欢迎大家在评论区讨论哦!有问题也可以讨论的!期待大家的互动!!!

公主/王子殿下,请给我点赞👍+收藏⭐️+关注➕(这对我真的很重要!!!

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

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

相关文章

【数据结构】线性表

一.线性表 1.定义&#xff1a; n个同类型数据元素的有限序列&#xff0c;记为 L为表名&#xff0c;i为数据元素在线性表中的位序&#xff0c;n为线性表的表长&#xff0c;n0时称为空表。 2.数据元素之间的关系&#xff1a; 直接前驱和直接后继 3.抽象数据类型线性表的定义…

git首次使用--去公司第一次拉取

文章目录 一&#xff0c; 在企业中首次拉取项目二&#xff0c;提交项目1. 提交----新添加的文件2. 将分支上的代码同步到master3. 提交----更改后的文件 三&#xff0c;常见问题1. Git Pull Failed 提示&#xff1a;以下是本篇文章正文内容&#xff0c;下面案例可供参考 一&am…

固定效应模型-以stata为工具

固定效应模型-以stata为工具 文章目录 1.固定效应模型2. 模型原理3. `stata`代码实现1.固定效应模型 固定效应模型(Fixed Effects Model)是一种面板数据分析方法,通过引入个体固定效应来控制个体间的异质性,并更准确地估计解释变量对因变量的影响。它在许多经济、社会科学…

qt项目-《图像标注软件》源码阅读笔记-类图

目录 1. 开源项目链接 2. 项目界面 3. 项目类图 3.1 形状的绘制及形状的存储 3.2 主窗口中心组件的界面管理 3.3 Command负责实现撤销和重做功能 3.4 其他类 3.5 枚举 3.5.1 Status 主窗口的状态变量 3.5.2 Mode 主窗口模式状态变量 3.5.3 shapeStatus 中心组件状态…

josef约瑟 电流继电器 RL-D1 电压AC220V 整定范围0-9.99AAC

系列型号 RL-D1型电流继电器&#xff1b; RL-D2型电流继电器&#xff1b; 基本参数 RL-D系列电流继电器用于发电机、变压器和输电线的过负荷和短路保护装置中作为启动元件。本继电器为集成电路型继电器&#xff0c;精度高、功耗小、动作时间快&#xff0c; 返回系数高、整定…

AndroidStudio无法新建aidl文件解决办法

我用的 AS 版本是 Android Studio Giraffe | 2022.3.1 Build #AI-223.8836.35.2231.10406996, built on June 29, 2023 右键新建 aidl 文件&#xff0c; 提示 (AIDL File)Requires setting the buildFeatures.aidl to true in the build file 解决办法 修改 app 的 build.…

03_排序

03_排序 一、简单排序Comparable接口介绍需求&#xff1a; 冒泡排序排序原理&#xff1a;冒泡排序API设计&#xff1a; 选择排序排序原理&#xff1a;选择排序API设计&#xff1a;选择排序的时间复杂度分析&#xff1a; 插入排序需求&#xff1a;排序原理&#xff1a;插入排序A…

三菱人机交互GT Designer的安装

今天&#xff0c;与小编一起来学习三菱的GT Designer软件&#xff0c;下面就是小编记录的软件查找&#xff0c;安装的全过程&#xff0c;希望对你学习三菱有帮助。 目录 安装 选择官网下载安装包 解压安装包进行安装 创建一个工程 安装 选择官网下载安装包 三菱&#xff08;中…

如何在linux安装软件

一.安装种类 1.编译安装&#xff1a;灵活性高&#xff0c;难度较大&#xff0c; 可以安装新版本 2.rpm安装&#xff1a;查软件信息&#xff0c;是否安装&#xff0c;文件列表 3.yum&#xff1a;是rpm的升级版本&#xff0c;解决rpm的弊端 rpm安装&#xff1a; 安装软件的时…

【架构】ServerLess

文章目录 概述什么是serverless无服务与传统模式架构区别serverless优缺点使用serverless的应用场景有哪些“无服务器”搭建网站Serverless的落地案例来源 概述 架构 单体&#xff08;三层架构&#xff09;微服务分布式ServerLess 什么是serverless无服务 serverless中文的…

VirtualBox虚拟机使用USB3.0网卡与开发板通信

因为我的笔记本没有带网口&#xff0c;所以我使用的是USB网卡。我按照网上其他人发的“VirtualBox与开发板、主机相互ping通”文章中提到的方法&#xff0c;进行网络设置后发现仍然无法实现Ubuntu虚拟机与主机和Linux开发板相互ping通。 仔细回想以前Ubuntu虚拟机使用USB读卡器…

Docker - 镜像 | 容器 日常开发常用指令 + 演示(一文通关)

目录 Docker 开发常用指令汇总 辅助命令 docker version docker info docker --help 镜像命令 查看镜像信息 下载镜像 搜索镜像 删除镜像 容器命令 查看运行中的容器 运行容器 停止、启动、重启、暂停、恢复容器 杀死容器 删除容器 查看容器日志 进入容器内部…

SpringSecurity【3】之授权

继续昨天的认证&#xff0c;今天来分析 在Spring Security中&#xff0c;授权是指对用户访问系统资源的限制。Spring Security提供了多种授权方式&#xff0c;包括基于角色的授权、基于表达式的授权、注解授权等。 基于角色的授权是指通过为用户分配不同的角色来限制其访问系统…

四、UART_阻塞发送中断接收

1、开发环境 (1)Keil MDK: V5.38.0.0 (2)MCU: mm320163D7P 2、实验目的&原理图 2.1、实验目的 (1)上位机串口助手给MCU发送信息&#xff0c;MCU串口通过通过串口助手接收后&#xff0c;将接收到的内容通过串口助手发送到上位机。 (2)串口在whil循环中每隔1秒发送一次…

蓝桥杯2020年5月青少组Python程序设计国赛真题

1、 上边是一个算法流程图,最后输出的b的值是() A.377 B.987 C.1597 D.2584 2、 3、如果整个整数X本身是完全平方数,同时它的每一位数字也都是完全平方数我们就称X 是完美平方数。前几个完美平方数是0、1、4、9、49、100、144......即第1个完美平方数是0,第2个是 1,第3个…

Hadoop入门学习笔记——一、VMware准备Linux虚拟机

视频课程地址&#xff1a;https://www.bilibili.com/video/BV1WY4y197g7 课程资料链接&#xff1a;https://pan.baidu.com/s/15KpnWeKpvExpKmOC8xjmtQ?pwd5ay8 Hadoop入门学习笔记&#xff08;汇总&#xff09; 目录 一、VMware准备Linux虚拟机1.1. VMware安装Linux虚拟机1.…

WEB 3D技术 three.js 通过lil-gui 控制x y z轴数值 操作分组 设置布尔值控制 颜色材质控制

上文 WEB 3D技术 three.js 通过lil-gui管理公共事件中 我们用 lil-gui 处理了一下基础事件和按钮的管理 那么 本文 我们来具体说说它能做的其他事 我们先将基础代码改成这样 import ./style.css import * as THREE from "three"; //引入lil-gui import { GUI } fro…

安装Kubernetes1.23、kubesphere3.4、若依项目自动打包部署到K8S记录

1.安装kubernetes1.23详细教程 kubernetes(k8s)集群超级详细超全安装部署手册 - 知乎 2.安装rancher动态存储 kubectl apply -f https://raw.githubusercontent.com/rancher/local-path-provisioner/master/deploy/local-path-storage.yaml3.安装kubesphere3.4 准备工作 您…

UE和Android互相调用

ue和android互调 这两种方式都是在UE打包的Android工程之上进行的。 一、首先是UE打包Android&#xff0c;勾选下面这项 如果有多个场景需要添加场景 工程文件在这个路径下 然后可以通过Android Studio打开&#xff0c;选择gradle打开 先运行一下&#xff0c;看看是否可以发布…

032 - STM32学习笔记 - TIM基本定时器(一) - 定时器基本知识

032 - STM32学习笔记 - TIM定时器&#xff08;一&#xff09; - 基本定时器知识 这节开始学习一下TIM定时器功能&#xff0c;从字面意思上理解&#xff0c;定时器的基本功能就是用来定时&#xff0c;与定时器相结合&#xff0c;可以实现一些周期性的数据发送、采集等功能&#…