二叉树经典OJ题

目录

  • 判断两棵二叉树是否相同
  • 单值二叉树
  • 判断对称二叉树
  • 另一棵树的子树
  • 二叉树遍历
  • 判断完全二叉树

判断两棵二叉树是否相同

力扣上忽然找不到这个题了,大家先看代码吧:

首先要注意的是,两棵树的前序遍历结果一样时,结构可能是不同的。
但我们这个题可以用前序遍历的思想去做,即比较根、左子树、右子树是否分别相同即可。

bool isSameTree(BTNode* p,BTNode* q)
{if(p==NULL&&q!=NULL||p!=NULL&&q==NULL)return false;if(p==NULL&&q==NULL)return true;if(p->val!=q->val)return false;return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}

单值二叉树

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

只有给定的树是单值二叉树时,才返回 true;否则返回 false。
在这里插入图片描述在这里插入图片描述

bool isUnivalTree(struct TreeNode* root)
{if(root==NULL)return true;if(root->left&&root->val!=root->left->val)return false; if(root->right&&root->val!=root->right->val)return false;bool ret1=isUnivalTree(root->left);    bool ret2=isUnivalTree(root->right);return ret1&&ret2;
}

判断对称二叉树

在这里插入图片描述
在这里插入图片描述

bool _symmetric(struct TreeNode* p,struct TreeNode* q)
{if(p==NULL&&q!=NULL||p!=NULL&&q==NULL)return false;if(p==NULL&&q==NULL)return true;if(p->val!=q->val)return false;return _symmetric(p->left,q->right)&&_symmetric(p->right,q->left);
}
bool checkSymmetricTree(struct TreeNode* root) {if(root==NULL)return true;return _symmetric(root->left,root->right);
}

另一棵树的子树

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

二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。
在这里插入图片描述在这里插入图片描述在这里插入图片描述

bool isSameTree(struct TreeNode* p, struct TreeNode* q) {if(p==NULL&&q!=NULL||p!=NULL&&q==NULL)return false;if(p==NULL&&q==NULL)return true;if(p->val!=q->val)return false;bool ret1=isSameTree(p->left,q->left);if(!ret1)return false;bool ret2=isSameTree(p->right,q->right);if(!ret2)return false;return true;
}
bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){if(root==NULL)return false;if(root->val==subRoot->val&&isSameTree(root,subRoot))return true;return isSubtree(root->left,subRoot)||isSubtree(root->right,subRoot);
}

二叉树遍历

编一个程序,读入用户输入的一串先序遍历字符串,根据此字符串建立一个二叉树(以指针方式存储)。例如如下的先序遍历字符串:
ABC##DE#G##F###,其中#表示空格,空格字符代表空树。建立起此二叉树以后,再对二叉树进行中序遍历,输出遍历结果。

#include<stdio.h>
#include<string.h>
#include<stdlib.h>
typedef struct node
{char val;struct node*left;struct node*right;
}NODE;void InOrder(NODE* root)
{if(root==NULL)return;InOrder(root->left);printf("%c ",root->val);InOrder(root->right);
}
NODE* CreateTree(char* s, int* pi)
{if(s[*pi]=='#'){(*pi)++;return NULL;}NODE* root=(NODE*)malloc(sizeof(NODE));root->val=s[(*pi)++];root->left=CreateTree(s,pi);root->right=CreateTree(s,pi);return root;
}
int main()
{char s[50];scanf("%s",s);int i=0;NODE* root=CreateTree(s,&i);InOrder(root);return 0;
}

判断完全二叉树

#define MAX 100
NODE* queue[MAX];
int Front=0,Rear=MAX-1,Count=0;
bool TreeIsComplete(NODE* root)
{if(root){Rear=(Rear+1)%MAX;queue[Rear]=root;Count++;}while(Count!=0){NODE* head=queue[Front];Front=(Front+1)%MAX;if(head==NULL)break;Rear=(Rear+1)%MAX;queue[Rear]=root->left;Count++;Rear=(Rear+1)%MAX;queue[Rear]=root->right;Count++;}while(Count!=0){NODE* head=queue[Front];Front=(Front+1)%MAX;if(head)return false;}
}

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

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

相关文章

期货交易纪律2024年6月22号

文章目录 期货交易系统构建第一步、选品第二步、开仓纪律第三步、持仓 2024年6月22号&#xff0c;开始写期货交易的第三篇日记。 交易记录&#xff1a;市场继续震荡&#xff0c;这两天无交易&#xff0c;继续梳理一些期货交易选品&#xff0c;周末详细的了解了一下豆粕&#xf…

vue3+element ui +ts 封装周范围选择器

vue3element ui ts 封装周范围选择器 在业务场景中&#xff0c;产品需要在页面中使用周范围选择器&#xff0c;我们在使用ant-design的时候里面是有自带的&#xff0c;但是在emement中只有指定周的范围选择器&#xff1a; 这个是ant-design的周范围选择器 这个是element ui 的…

阿里云推出首个 AI 程序员!

AI圈最近又发生了啥新鲜事&#xff1f; 该栏目以周更频率总结国内外前沿AI动态&#xff0c;是快速了解AI发展趋势一个不错的方式&#xff0c;感兴趣的可以点击订阅合集以及时收到最新推送 DeepSeek Coder V2开源发布&#xff0c;首超GPT4-Turbo的代码能力 全球首个在代码、数…

(经验)高考填报志愿,有哪些坑你需要避开?

高考年年考&#xff0c;填报志愿的却年年都是新手.....哪些关于高考填报志愿的坑&#xff0c;依旧还继续坑....是时候做些改变了。过来人写的几点避坑&#xff0c;希望给这届新人做参考。 1、不要什么热门就报什么&#xff0c;因为有些东西别人学得很快&#xff0c;而我慢的像蜗…

物联网系统运维——移动电商应用发布,Tomcat应用服务器,实验CentOS 7安装JDK与Tomcat,配置Tomcat Web管理界面

一.Tomcat应用服务器 1.Tomcat介绍 Tomcat是- -个免费的开源的Ser Ivet容器&#xff0c;它是Apache基金会的Jakarta 项目中的一个核心项目&#xff0c;由Apache&#xff0c; Sun和其他一 些公司及个人共同开发而成。Tomcat是一一个小型的轻量级应用服务器&#xff0c;在中小型…

23.并发

目录 一、一些概念二、进程和线程2.1 概念2.2 多线程导致的问题2.3 使用spawn创建新线程2.4 线程与move闭包 三、消息传递3.1 概念3.2 创建通道3.3 示例3.4 其它测试 四、共享状态并发4.1 互斥器4.2 Mutex的API4.3 多线程共享Mutex1&#xff09;在多线程之间共享值&#xff1b;…

Pikachu靶场--CRSF

借鉴参考 CSRF跨站请求伪造&#xff08;CTF教程&#xff0c;Web安全渗透入门&#xff09;_bilibili pikachu靶场CSRF之TOKEN绕过_csrf token绕过的原理-CSDN博客 CSRF(get) 发现需要登录 查看提示&#xff0c;获取username和password 选择一个用户进行登录 选择修改个人信息 …

基于SpringBoot+Vue汽车配件销售管理系统设计和实现(源码+LW+调试文档+讲解等)

&#x1f497;博主介绍&#xff1a;✌全网粉丝10W,CSDN作者、博客专家、全栈领域优质创作者&#xff0c;博客之星、平台优质作者、专注于Java、小程序技术领域和毕业项目实战✌&#x1f497; &#x1f31f;文末获取源码数据库&#x1f31f; 感兴趣的可以先收藏起来&#xff0c;…

【设计模式-04】原型模式

【设计模式-04】原型模式 1. 概述2. 结构3. 实现4. 案例5. 使用场景6. 优缺点6.1 原型模式的优点6.2 原型模式的缺点 7. 实现深克隆(深拷贝) 1. 概述 原型模式: 用一个已经创建的实例作为原型&#xff0c;通过复制该原型对象来创建一个和原型对象相同的新对象。 2. 结构 原型…

5.树莓派4b+ubuntu18.04(ros版本melodic)+arduino mega自制两轮差速小车,实现建图导航功能

这一节介绍雷达的使用&#xff0c;我们使用的雷达型号是ydlidar x3 1.进入工作空间 cd catkin_ws/src2.下载官方提供的SDK文件 git clone https://github.com/YDLIDAR/YDLidar-SDK.git3.安装cmake sudo apt install cmake pkg-config4.编译和安装 进入YDLidar-SDK文件夹后如…

在线随机密码生成工具

对于运维工作&#xff0c;经常需要生产随机密码&#xff0c;这里介绍一款在线生成密码工具&#xff0c;支持配置密码组合类型&#xff0c;如数字、字母大小写、特殊字符等&#xff0c;还能排除某些特殊字符。 在线随机密码生成工具 https://tool.hiofd.com/random-string-gen…

SLAM Paper Reading和代码解析

最近对VINS、LIO-SAM等重新进行了Paper Reading和代码解析。这两篇paper和代码大约在三年前就读过&#xff0c;如今重新读起来&#xff0c;仍觉得十分经典&#xff0c;对SLAM算法研发具有十分重要的借鉴和指导意义。重新来读&#xff0c;对其中的一些关键计算过程也获得了更新清…

Django 模版过滤器

Django模版过滤器是一个非常有用的功能&#xff0c;它允许我们在模版中处理数据。过滤器看起来像这样&#xff1a;{{ name|lower }}&#xff0c;这将把变量name的值转换为小写。 1&#xff0c;创建应用 python manage.py startapp app5 2&#xff0c;注册应用 Test/Test/sett…

FPGA PCIe加载提速方案

目录 1.bit流压缩 2.flash加载速度 3.Tandem模式 1.bit流压缩 set_property BITSTREAM.GENERAL.COMPRESS TRUE [current_design] 2.flash加载速度 打开bitstream setting&#xff0c;设置SPI的线宽和速率&#xff08;线宽按原理图设置&#xff0c;速率尽可能高&#xff09…

day3-xss漏洞(米斯特web渗透测试)

day3-xss漏洞&#xff08;米斯特web渗透测试&#xff09; XSSXss种类三种反射型1.反射型xss2.存储型xss3.DOM型xss XSS Xss有一部分是前端的有一部分不是前端的&#xff0c;我们来看一下&#xff0c;昨天的HTML注入修复方法应灵活使用。 HTML注入是注入一段HTML&#xff0c;那…

AI大模型之争:通用性与垂直性,哪个更具优势?

文章目录 每日一句正能量前言背景介绍能力分析通用大模型的能力&#xff1a;垂直大模型的能力&#xff1a;差异与互补性分析&#xff1a; 难点探究1. 算力挑战2. 数据挑战3. 算法挑战4. 泛化能力5. 可解释性和透明度6. 伦理和偏见问题7. 成本效益 后记 每日一句正能量 昨天已逝…

汇编快速入门

一.基础知识 1.数据类型 DB&#xff08;Define Byte&#xff0c;字节类型 占位8位bit 1字节&#xff09; 范围&#xff1a;DB可以用来定义&#xff08;无符号、有符号&#xff09;整数&#xff08;包含二、十、十六进制&#xff09;和字符 语法&#xff1a;a DB 数据个数…

增加attention的seq2seq和transformer有什么区别

1.seq2seq是什么 seq2seq 是一个Encoder–Decoder 结构的网络&#xff0c;它的输入是一个序列&#xff0c;输出也是一个序列。Encoder 中将一个可变长度的信号序列变为固定长度的向量表达&#xff0c;Decoder 将这个固定长度的向量变成可变长度的目标的信号序列。   很多自然…

package.json简介

1、package.json简介 通过 npm init 初始化一个项目&#xff0c;会生成3个目录/文件&#xff0c; node_modules, package.json和 package.lock.json。其中package-lock.json文件是为了锁版本。 2、package.json常用属性 1&#xff09;name name是项目的名称&#xff0c;命名…

2024最新1小时零基础编写uniapp和小程序管理后台,基于uniadmin和vue3实现uniapp小程序的网页管理后台

一&#xff0c;创建uniAdmin项目 打开开发者工具Hbuilder,然后点击左上角的文件&#xff0c;点新建&#xff0c;点项目。如下图。 选择uniadmin&#xff0c;编写项目名&#xff0c;然后使用vue3 记得选用阿里云服务器&#xff0c;因为最便宜 点击创建&#xff0c;等待项目创…