数据结构初阶之二叉树性质练习与代码练习

个人主页:点我进入主页

专栏分类:C语言初阶      C语言程序设计————KTV       C语言小游戏     C语言进阶

C语言刷题       数据结构初阶    Linux

欢迎大家点赞,评论,收藏。

一起努力,共赴大厂。

目录

1.前言

2.性质练习

3.代码练习 

3.1单值二叉树

3.2检查两颗树是否相同

3.3对称二叉树

3.4另一颗树的子树

4.总结


1.前言

        二叉树的学习是枯燥的也是充满乐趣的,它的核心部分是递归,这就需要我们多去刷题,树是一对多的结构,你是否还记得我在上一篇中写到树的内容可以分为根节点,左孩子右孩子,左子树右子树和根节点,左子树右子树这两种方法吗?这两种非常的重要,今天我们的代码部分会让你深刻的了解这句话,没有看上一篇对二叉树的解析的小伙伴可以去我主页进行查找。

2.性质练习

1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )
A 不存在这样的二叉树
B 200
C 198
D 199

        我们根据二叉树的性质,只要是二叉树就会有度为0的节点个数等于度为2的节点个数加1,所以我们可以得到叶子节点的个数为200个,选择b。

 2.下列数据结构中,不适合采用顺序存储结构的是( )
A 非完全二叉树
B 堆
C 队列
D 栈

        虽然这几种都可以采用顺序表进行存储,但是非完全二叉树存储起来比较困难,主要是我们不容易找到父节点和孩子节点的位置,所以选择A。 

3.在具有 2n 个结点的完全二叉树中,叶子结点个数为( )
A n
B n+1
C n-1
D n/2

        我们知道二叉树有度为0,度为1,度为2,这三种所以我们可以得到n0+n1+n2=2n,我们在根据性质度为0的节点个数等于度为2的节点个数加1得到2n0+n1-1=2n.由于是完全二叉树,所以我们可以知道度为1的节点只能是0或1我们带入后可以知道有一个,所以叶子节点个数为n,所以选择A。

4.一棵完全二叉树的节点数位为531个,那么这棵树的高度为( )
A 11
B 10
C 8
D 12

        我们根据二叉树的深度为log(n+1),我们可以得到为10,所以选择B。

5.一个具有767个节点的完全二叉树,其叶子节点个数为()
A 383
B 384
C 385
D 386

        我们根据最后一个节点编号为766,它的父节点为(766-1)/2=382,所以叶子节点个数为766-382=384.所以我们选择B。

3.代码练习 

3.1单值二叉树

965. 单值二叉树

已解答

简单

相关标签

相关企业

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

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

示例 1:

输入:[1,1,1,1,1,null,1]
输出:true

示例 2:

输入:[2,2,2,5,2]
输出:false

        在这里我们分为根节点,左孩子右孩子,左子树右子树进行解题,当我们的根节点为空时返回true,当我们的左孩子不为空且值与根节点不同时返回false,当右孩子不为空且值与根节点不同时返回false,然后判断左子树与右子树,代码如下:

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

3.2检查两颗树是否相同

100. 相同的树

已解答

简单

相关标签

相关企业

给你两棵二叉树的根节点 p 和 q ,编写一个函数来检验这两棵树是否相同。

如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的。

示例 1:

输入:p = [1,2,3], q = [1,2,3]
输出:true

示例 2:

输入:p = [1,2], q = [1,null,2]
输出:false

示例 3:

输入:p = [1,2,1], q = [1,1,2]
输出:false

        在这里我们分为根节点,左子树右子树,当我们的根节点都为空时返回true,当其中一个为空,另一个不为空时返回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(p!=NULL&&q==NULL)return false;if(p->val!=q->val)return false;return isSameTree(p->left,q->left)&&isSameTree(p->right,q->right);
}

3.3对称二叉树

101. 对称二叉树

给你一个二叉树的根节点 root , 检查它是否轴对称。

示例 1:

输入:root = [1,2,2,3,4,4,3]
输出:true

示例 2:

输入:root = [1,2,2,null,3,null,3]
输出:false

        我们根据根节点,左孩子右孩子,左子树右子树进行判断,我们先判断根节点是否为空,为空返回false,然后判断左孩子和右孩子是否相同,然后返回左子树和右子树,这时候我们就将问题转化为判断左子树和右子树是否是同一颗树,我们就将问题转化为根节点,左子树右子树的问题,先判断权为空返回true,一个为空另一个不为空返回false,都不是空但是值不相同反水false,然后反水左子树与右子树。详细代码如下:

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

3.4另一颗树的子树

572. 另一棵树的子树

已解答

简单

相关标签

相关企业

提示

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

二叉树 tree 的一棵子树包括 tree 的某个节点和这个节点的所有后代节点。tree 也可以看做它自身的一棵子树。

示例 1:

输入:root = [3,4,5,1,2], subRoot = [4,1,2]
输出:true

示例 2:

输入:root = [3,4,5,1,2,null,null,null,null,0], subRoot = [4,1,2]
输出:false

       我们同样将问题转化为根节点,左子树右子树,当根结点为空时返回false,当根节点的值与它相同时进行判断是不是为相同的树,这是时候我们还是根节点,左子树右子树进行判断,当都为空时返回true,只有一个为空时返回fasle,值不相同时返回false,然后进行判断左子树右子树。然后判断左子树与右子树。详细代码如下:

bool issampetree(struct TreeNode* root1,struct TreeNode* root2)
{if(root1==NULL&&root2==NULL)return true;if(root1==NULL&&root2!=NULL)return false;if(root2==NULL&&root1!=NULL)return false;if(root1->val!=root2->val)return false;return issampetree(root1->right,root2->right)&&issampetree(root1->left,root2->left);}bool isSubtree(struct TreeNode* root, struct TreeNode* subRoot){if(root==NULL)return false;if(root->val==subRoot->val){if(issampetree(root,subRoot))return true;}return isSubtree(root->right,subRoot)||isSubtree(root->left,subRoot);
}

4.总结

        今天的内容就到这里了,想要学好二叉树就需要多练,可以多看看这篇文章和上一篇二叉树的文章,相信大家可以学到很多,其实二叉树就是递归,多画几次递归展开图就能理解其中是如何运行的。最后别忘了三连呀。

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

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

相关文章

高效便捷的淘宝商品详情关键词搜索API接口

联讯数据可以介绍一些高效便捷的淘宝商品详情关键词搜索API接口。 以下是一些可以考虑使用的API接口: 阿里云搜索引擎API:阿里云搜索引擎API是一个基于云计算技术的搜索引擎,提供商品详情关键词搜索功能。它支持中文搜索,并且具…

VMware安装OpenEuler(安装界面)

本文中使用的OpenEuler版本:22.03 LTS SP2 VMware:17.0.0 一、下载镜像 根据CPU和场景,按需下载 https://www.openeuler.org/zh/download/?versionopenEuler%2022.03%20LTS%20SP2 二、初始化VmWare 三、配置操作系统 四、安装操作系统 …

DouyinAPI接口开发系列丨商品详情数据丨视频详情数据

电商API就是各大电商平台提供给开发者访问平台数据的接口。目前,主流电商平台如淘宝、天猫、京东、苏宁等都有自己的API。 二、电商API的应用价值 1.直接对接原始数据源,数据提取更加准确和完整。 2.查询速度更快,可以快速响应用户请求实现…

实验3.5 路由器的单臂路由配置

实验3.5 路由器的单臂路由配置 一、任务描述二、任务分析三、具体要求四、实验拓扑五、任务实施1.SWA的基本配置2.RA的基本配置3.在RA上查看接口状态 六、任务验收七、任务小结 一、任务描述 某公司对部门划分了需VLAN之后,发现两个部门之间无法通信,但…

[PyTorch][chapter 5][李宏毅深度学习][Classification]

前言: 这章节主要讲解常用的分类器原理.分类主要是要找到一个映射函数 比如垃圾邮件分类 : c0, 垃圾邮件 c1 正常邮件 主要应用场景: 垃圾邮件分类,手写数字识别,金融信用评估. 这里面简单了解一下,很少用 目录: 1: …

外包干了一个月,技术明显进步。。。。。

先说一下自己的情况,本科生生,19年通过校招进入南京某软件公司,干了接近2年的功能测试,今年年初,感觉自己不能够在这样下去了,长时间呆在一个舒适的环境会让一个人堕落!而我已经在一个企业干了2年的功能测试…

Linux--学习记录(2)

解压命令: gzip命令: 参数: -k:待压缩的文件会保留下来,生成一个新的压缩文件-d:解压压缩文件语法: gzip -k pathname(待压缩的文件夹名)gzip -kd name.gz(待解压的压缩包名&#x…

Tap虚拟网卡

1 概述 Tap设备通常用于虚拟化场景下,其驱动代码位于drivers/net/tun.c,tap与tun复用大部分代码, 注:drivers/net/tap.c并不是tap设备的代码,而是macvtap和ipvtap; 下文中,我们统一称tap&#…

L1-029:是不是太胖了

题目描述 据说一个人的标准体重应该是其身高(单位:厘米)减去100、再乘以0.9所得到的公斤数。已知市斤的数值是公斤数值的两倍。现给定某人身高,请你计算其标准体重应该是多少?(顺便也悄悄给自己算一下吧………

uni-app实现安卓原生态调用身份证阅读器读卡库读身份证和社保卡、银行卡、IC卡等功能

DONSEE系列多功能读写器Android Uniapp API接口规范V1.0.0 本项目Uniapp调用了身份证读卡器的库文件:DonseeDeviceLib-debug.aar,该库放到nativeplugins\donsee-card\android,然后会自动加载。SDK会自动检查是否拥有USB设备权限,…

python爬取 HTTP_2 网站超时问题的解决方案

问题背景 在进行网络数据爬取时,使用 Python 程序访问支持 HTTP/2 协议的网站时,有时会遇到超时问题。这可能会导致数据获取不完整,影响爬虫程序的正常运行。 问题描述 在实际操作中,当使用 Python 编写的爬虫程序访问支持 HTT…

特殊进程之守护进程

文章目录 1、守护进程的概念2、如何查看守护进程3、编写守护进程的步骤3.1 创建子进程,父进程退出3.2 在子进程中创建新会话3.3 改变当前工作目录3.4 重设文件权限掩码3.5 关闭不需要的文件描述符3.6 某些特殊的守护进程打开/dev/null 4、守护进程代码示例 1、守护进…

一对一聊天程序

package untitled1.src;import javax.swing.*; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.*; import java.net.*;public class MyServer extends JFrame{private ServerSocket server; // 服务器套接字pri…

22、pytest多个参数化的组合

官方实例 # content of test_multi_parametrie.py import pytestpytest.mark.parametrize("x",[0,1]) pytest.mark.parametrize("y",[2,3]) def test_foo(x,y):print("{}-{}".format(x,y))pass解读与实操 要获得多个参数化参数的所有组合&…

解决使用pnpm安装时Sharp模块报错的方法

在使用pnpm进行项目依赖安装的过程中,有时候会遇到Sharp模块报错的情况。Sharp是一个用于处理图像的Node.js模块,但它的安装可能会因为各种原因而失败,导致项目无法正常启动。本文将介绍这个问题的方法。 问题描述 解决方法 在命令行分别输…

jsp在线辅助教育系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 JSP 在线辅助教育系统是一套完善的java web信息管理系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为Mysql5.0&…

概率密度函数(PDF)正态分布

概率密度函数(PDF)是一个描述连续随机变量取特定值的相对可能性的函数。对于正态分布的情况,其PDF有一个特定的形式,这个形式中包括了一个常数乘以一个指数函数,它假设误差项服从均值为0的正态分布: p ( …

【数据结构】——队列实现二叉树的功能

前言:二叉树的实现方式多种多样,有数组实现满二叉树,有链表实现完全二叉树,今天我们就用队列来实现二叉树。 创建二叉树: typedef int BTDataType; typedef struct BinaryTreeNode {BTDataType data;struct BinaryTre…

java8 常用code

文章目录 前言一、lambda1. 排序1.1 按照对象属性排序:1.2 字符串List排序:1.3 数据库排序jpa 2. 聚合2.1 基本聚合(返回对象list)2.2 多字段组合聚合(直接返回对象list数量) 二、基础语法2.1 List2.1.1 数…

Java对象转Map

在和外部系统对接时&#xff0c;对方系统提供的SDK方法入参全是Map&#xff0c;没办法&#xff0c;只能想办法把对象转成Map。这里&#xff0c;借助了hutool的工具类&#xff0c;可以方便的通过反射获取对象的属性。引入hutool的maven配置&#xff1a; <dependency><g…