首页 > 其他分享 >数据结构-->二叉树 OJ_01

数据结构-->二叉树 OJ_01

时间:2023-04-16 16:36:18浏览次数:34  
标签:结点 01 return OJ -- oss 二叉树 root

经过前几期浴血奋战!!二叉树便要进入应用阶段了!今天,为大家带来几道 OJ 题的讲解!

数据结构-->二叉树 OJ_01_单值二叉树

1.单值二叉树

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

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

下面为了方便理解,进行图解举例 :>

数据结构-->二叉树 OJ_01_单值二叉树_02

有上述的两种情况,其中还需要考虑到空节点的情况

现在上手代码,如下 :>

typedef int BTDataType;

typedef struct BinaryTree
{
	BTDataType data;
  struct BinaryTree* left;
  struct BinaryTree* right;
}BTNode;


//布尔判断单值二叉树
bool isUniverTree(BTNode* root)
{
	if(root == NULL)
    return true;
  
  if(root ->left && root ->left ->data != root ->data)
  {
  	return false;
  }
  
  if(root ->right && root ->right ->data != root ->data)
  {
  	return false;
  }
  
  return isUniverTree(root ->left) && isUniverTree(root ->right);
}

为了方便大家,能有更好的观感体验,特附上有色彩图样代码 :>

数据结构-->二叉树 OJ_01_布尔判断 相同的二叉树_03

另外,多讲一句废话!!上述代码,依靠强大的递归实现!!对递归是有要求的!!

2.相同的树

给定两颗二叉树的根结点 p 和 q, 编写一个函数来检验这两棵树是否相同!

如果两棵树在结构上相同,并且结点具有相同的值,则认为这两棵树相同!

本道 OJ 题,思路该如何打开呢?

-----> 既然是根结点,那么不可避免的是空结点的考虑!

下一步,则是存在根结点至少有一个不为空,那么言外之意是,有可能该两个根结点都不为空

此种情况的对应,是下列代码的,第二个 条件判断句,以及第三个 条件判断句

现在手搓代码 :>

typedef int BTDataType;

typedef struct BinaryTree
{
	BTDataType data;
  struct BinaryTree* left;
  struct BinaryTree* right;
}BTNode;

//布尔判断相同二叉树
bool isSameTree(BTNode* p, BTNode* q)
{
	if(p == NULL && q == NULL)
  {
		return true;  	
  }
  
  //至少有一个不为空
  if(p == NULL || q == NULL)
  {
  	return false;
  }
  
  //两个根结点都不为空
  if(p ->data != q ->data)
  {
  	return false;
  }
  
  //左子树递归遍历 && 右子树递归遍历
  return isSameTree(p ->left, q ->left)
    		&& isSameTree(p ->right, q ->right);
}

为了方便大家观感,特别附上彩色代码图样 :>

数据结构-->二叉树 OJ_01_布尔判断 相同的二叉树_04

另外,注意一点,可能会有部分老友,对上述的解析看不懂

比如说,根结点的情况,当递归遍历的时候,从那个起始点开始,就当做了根结点!!

不知这样解说,是否已经足够清晰了!!

标签:结点,01,return,OJ,--,oss,二叉树,root
From: https://blog.51cto.com/u_15808800/6193477

相关文章

  • 第3章 高可用负载均衡集群规划
    作者:田逸(formyz) 开篇之初,先举几个反例,来说明事前规划的重要性。案例一:某广告媒体公司,需要部署一套媒体播放系统,由一台应用服务器和一台数据库服务器组成,让人没想到的是,为了这两台服务器,花了几十万采购了一台网络端口超过96个的三层核心交换机。询问相关人员,这样配备是基于什么考虑......
  • dc3
    DC3(难)一.主机发现二.端口扫描和探测1.我们发现开通了80端口2.发现提示3.访问IP地址得到登录页4.扫描网站看是否由隐藏目录dirsearch-uhttp://10.0.2.19/5.访问/README.txt和/administrator在/readme.txt中发现了了是cms结构joomla,我们了解一下joomla我们在ad......
  • docker 构建自定义镜像
    1、docker构建自定义镜像copy与add的区别copy指令和add指令的唯一区别在于:是否支持从远程URL获取资源。COPY指令只能从执行dockerbuild所在的主机上读取资源并复制到镜像中。而ADD指令还支持通过URL从远程服务器读取资源并复制到镜像中。相同需求时,推荐使用COPY指令。ADD指令更......
  • 05.单元测试、注解和反射
    1、单元测试什么是单元测试?单元测试就是针对最小的功能单元编写测试代码,Java程序最小的功能单元是方法,因此,单元测试就是针对Java方法的测试,进而检查方法的正确性。目前测试方法是怎么进行的,存在什么问题?只有一个main方法,如果一个方法的测试失败了,其他方法测试会受到影响......
  • 中国蚁剑下载安装
    蚁剑安装和基本使用_哔哩哔哩_bilibili1、介绍中国蚁剑是一款webshell管理工具,开源免费。一般搭配文件上传漏洞使用。2、下载antsword·GitHubTopics·GitHub代码和加载器这两个都需要下载,注意下载器直接下载我这里解压不出来,文件损坏,需要到GitHub–AntSwordProject/A......
  • k8s使用kubeadm 添加新的node节点
    1.关闭防火墙$systemctlstopfirewalld备注:必须关闭2.关闭selinux$setenforce03.关闭swap$swapoff-a临时关闭$free可以通过这个命令查看swap是否关闭了$vim/etc/fstab永久关闭#/dev/mapper/centos_k8s--master-swapswapswap......
  • 分玩具的源文件mytool.h
    #include<stdio.h>#include<stdlib.h>#defineSTACK_INT_SIZE10#defineSTACKINCREMENT5#defineOK1#defineERROR0#defineMAXQSIZE51typedefintElemType;typedefintQElemType;/*队列元素类型*///栈的基本操作typedefstruct{ElemType*base;......
  • 中国蚁剑使用
    使用phpstudy搭建的dvwa靶场,测试文件上传漏洞low级别。1、准备php木马文件,命名为up.php<?phpeval($_POST['abc']);?>2、phpstudy启动,dvwa登录,置为low级别3、上传up.php4、浏览器访问上传的php文件,未报404,说明访问成功5、启动中国蚁剑exe,在主面板右键菜单栏选择添加数据......
  • SaaS企业做NPS调研很简单!Partner Share推荐意愿调查就可实现
    对于 SaaS企业来说,了解客户需求和满意度调查是改善SaaS产品和业务攻坚克难的关键。想做到这一点,就需要调研收集一线使用客户的正确需求。 NPS调研我根据业内合作伙伴的交流发现:大部分SaaS企业产品经理都会借助相关工具半自助完成调研,并取得改进建议,不断对产品进行优化升级。业内......
  • 函数声明提升
    在条件控制语句中的函数声明解释器在编译阶段无法识别并提升,执行阶段才会被声明存在foo();//TypeError:fooisnotafunctionvara=false;if(a){functionfoo(){console.log("a");}}else{functionfoo(){console.l......