Java 二叉数(1)

一、认识树

树是一种非线性的数据结构,它是由n(n>=0)个有限结点组成一个具有层次关系的集合。把它叫做树是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。它具有以下的特点:

  •          有一个特殊的结点,称为根结点,根结点没有前驱结点
  •         除根结点外,其余结点被分成M(M > 0)个互不相交的集合T1、T2、......、Tm,其中每一个集合Ti (1 又是一棵与树类似的子树。每棵子树的根结点有且只有一个前驱,可以有0个或多个后继
  •         树是递归定义的。

注意:

  • 树形结构中,子树之间不能有交集,否则就不是树形结构
  • 除了根节点外,每个节点有且仅有一个父节点
  • 一棵n个节点的树有n-1条边

二、树中的概念

结点的度:一个结点含有子树的个数称为该结点的度   如上图:A的度为3

树的度:一棵树中,所有结点度的最大值称为树的度   如上图:树的度为3

叶子结点或终端结点:度为0的结点称为叶结点   如上图:K  J  L节点为叶结点

双亲结点或父结点:若一个结点含有子结点,则这个结点称为其子结点的父结点   如上图:A是B的父结点

孩子结点或子结点:一个结点含有的子树的根结点称为该结点的子结点   如上图:B是A的孩子结点

根结点:一棵树中,没有双亲结点的结点    如上图:A

结点的层次:从根开始定义起,根为第1层,根的子结点为第2层,以此类推

树的高度:树中结点的最大层次   如上图:树的高度为4

树的深度:节点的相对位置,如上图:B的深度是2,E的深度是3,J的深度是4

三、二叉树

1、概念

一棵二叉树是结点的一个有限集合,该集合:

  • 或者为空
  • 或者是由一个根节点加上两棵别称为左子树和右子树的二叉树组成。

注意:

  • 二叉树不存在度大于2的结点
  • 二叉树的子树有左右之分,次序不能颠倒,因此二叉树是有序树

2、两种特殊的二叉树 

  • 满二叉树: 一棵二叉树,如果每层的结点数都达到最大值,则这棵二叉树就是满二叉树。也就是说,如果一棵二叉树的层数为K,且结点总数是2^{k}-1 ,则它就是满二叉树。
  •  完全二叉树: 完全二叉树是效率很高的数据结构,完全二叉树是由满二叉树而引出来的。对于深度为K的,有n个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从0至n-1的结点一一对应时称之为完全二叉树。也就是从上到下,从左到右,需要依次放节点,不能跳着放。要注意的是满二叉树是一种特殊的完全二叉树。

没有11节点,直接10到12,这就不是完全二叉树 

3、二叉树的性质 

1. 若规定根结点的层数为1,则一棵非空二叉树的第i层上最多2^{i-1}(i>0)个结点

2. 若规定只有根结点的二叉树的深度为1,则深度为K的二叉树的最大结点数是2^{k}-1(k>=0)

3. 对任何一棵二叉树, 如果其叶结点个数为 n0, 度为2的非叶结点个数为 n2,则有n0=n2+1

度为0的节点会比度为2的节点多一个

公式推导:

4. 具有n个结点的完全二叉树的深度k为上取整

求解上述二叉树的深度:节点n=9     9+1=10    2^{3}=8\, \, \, \, \, \, \, 2^{4}=16   因此取4 

5. 对于具有n个结点的完全二叉树,如果按照从上至下从左至右的顺序对所有节点从0开始编号,则对于序号为i的结点有:

  • 若i>0,双亲序号:(i-1)/2;i=0,i为根结点编号,无双亲结点
  • 若2i+1<n,左孩子序号:2i+1,否则无左孩子
  • 若2i+2<n,右孩子序号:2i+2,否则无右孩子

例如:

已知孩子节点下标是i,求父亲节点:(i-1)/  2

已知父亲节点下标是i,左孩子:2*i+1,右孩子:2*i+2(前提:孩子节点序数小于n)

4、例题

1. 某二叉树共有 399 个结点,其中有 199 个度为 2 的结点,则该二叉树中的叶子结点数为( )

A 不存在这样的二叉树

B 200

C 198

D 199

题解:n0 = n2+1 = 200

2.在具有 2n 个结点的完全二叉树中,叶子结点个数为( )

A n

B n+1

C n-1

D n/2

偶数个节点

n0:

n1: 1

n2: 

奇数个节点

 

n0:

n1: 0

n2: 

题解:

2n是个偶数,所以2n = n0+1+n2

n0=n2+1

所以2n = n0 + 1 + n0 - 1

n0 = n

3.一个具有767个节点的完全二叉树,其叶子节点个数为()

A 383

B 384

C 385

D 386

题解:

767是奇数,所以767 = n0+n2=n0+n0-1

n0=384

4.一棵完全二叉树的节点数为531个,那么这棵树的高度为( )

A 11

B 10

C 8

D 12

题解:根据之前的性质4: 具有n个结点的完全二叉树的深度k为上取整

k= 10

 

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

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

相关文章

react-router-dom+history路由跳转白屏需手动刷新才显示

搭建一个新项目&#xff0c;路由照常配好了&#xff0c;但是很奇怪&#xff0c;跳转的时候第一次白屏&#xff0c;<root></root>里面只有一个,号&#xff0c;页面是空白的&#xff0c;再手动刷新才显示内容&#xff0c;检查了路由很多遍&#xff0c;也看了地址栏都…

javascript密码验证规则,数字、字母、特殊符号两种以上

在验证密码复杂的正则表达试中&#xff0c;几位码友有发布过从两种字符里选两种的&#xff0c;从三种字符里选有三种的。 今天我提一个从三种里选两种的。有喜欢的朋友拿去用。 密码须包含数字、字母、特殊符号两种以上&#xff0c;且不少于8位&#xff0c;不多于32位。 pass…

IDEA中的Debug功能介绍

说明&#xff1a;本文介绍IDEA中的Debug功能&#xff0c;基于2023.2&#xff08;Ultimate Edition&#xff09;版本 简单介绍 首先&#xff0c;在程序需要停止的所在行号上&#xff0c;鼠标左键&#xff0c;可设置一个断点&#xff0c;是一个红色圆点标志&#xff0c;表示程序…

2024年腾讯云优惠券领取步骤使用教程详解

随着云计算技术的快速发展&#xff0c;越来越多的企业和个人开始选择使用云服务来提升自己的业务能力和工作效率。腾讯云作为国内领先的云服务提供商&#xff0c;其优质的服务和丰富的资源吸引了大量的用户。为了回馈广大用户&#xff0c;腾讯云经常会推出各种优惠活动&#xf…

nfs部署--相关记录

以下是在 CentOS 8 中将 10.40.111.41 上的 /nfsdata 目录通过 NFS 共享到 10.40.111.43 和 10.40.111.45 的 /nfsdata 目录的详细步骤&#xff1a; 在 10.40.111.41 上操作&#xff1a; 安装并配置 NFS 服务器&#xff1a; a. 安装 NFS 服务器软件包&#xff1a; sudo dnf in…

【b站李同学的Lee】2 Git进阶【gitgithub】入门教程,必学!

课程地址&#xff1a;【【git&github】入门教程&#xff0c;必学&#xff01;】 https://www.bilibili.com/video/BV1cE411G7yc/?share_sourcecopy_web&vd_sourceb1cb921b73fe3808550eaf2224d1c155 目录 2 Git进阶 2.1 分支 2.1.1 分支细分 2.1.2 分支命令 1查看…

LeetCode-热题100:148. 排序链表

题目描述 给你链表的头结点 head &#xff0c;请将其按 升序 排列并返回 排序后的链表 。 示例 1&#xff1a; 输入&#xff1a; head [4,2,1,3] 输出&#xff1a; [1,2,3,4] 示例 2&#xff1a; 输入&#xff1a; head [-1,5,3,4,0] 输出&#xff1a; [-1,0,3,4,5] 示例…

vue 和 react 的区别

不同点 vue vue 把 html、css、js写到一个文件中&#xff0c;逻辑更加清楚vue 使用了模版系统&#xff0c;提供了模版引擎处理响应式&#xff0c;数据的双向绑定&#xff0c;但是也是单向数据流更易于上手 react 使用 jsx 语法&#xff0c;允许我们在 js 中书协 html 代码…

unity学习(83)——细节名称和血条

眼中有细节&#xff0c;学习的过程才能平稳&#xff01; 1.游戏更新时把名字也更新 代码如下&#xff1a; 效果如下&#xff1a; 2.因为是第三人称&#xff0c;从背后看&#xff0c;所以名称应该水平对称&#xff0c;翻转一下&#xff01;rotate y180 游戏内效果如下&#xf…

升级xcode15 报错Error (Xcode): Cycle inside Runner

升级xcode15后报错 Could not build the precompiled application for the device. Error (Xcode): Cycle inside Runner; building could produce unreliable results. This usually can be resolved by moving the shell script phase Thin Binary so that it runs before th…

Python程序设计 列表

教学案例八 列表 1. 计算并显示斐波那契数列 输入n,计算并显示斐波那契数列前n项.一行打印5项&#xff0c;每项显示宽度为6 什么是斐波那契数列 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列、 因数学家莱昂纳多斐波那契&#xff…

vue动态绑定class的几种方法

一、对象语法 1、给v-bind:class 设置一个对象&#xff0c;可以动态地切换class&#xff0c;例如&#xff1a; <div id"app"><div :class"{active:isActive}"></div> </div> <script> var app new Vue({el:#app,data:{isA…

FreeRTOS任务切换学习

FreeRTOS任务切换学习 所谓任务切换&#xff0c;就是CPU寄存器的切换。假设当由任务A切换到任务B时&#xff0c;主要分为两步&#xff1a; 1&#xff1a;需暂停任务A的执行&#xff0c;并将此时任务A的寄存器保存到任务堆栈&#xff0c;这个过程叫做保存现场&#xff1b; 2&am…

【无标题】系统思考—心智模式

“直到你使无意识变为有意识&#xff0c;它将指导你的生活并且你会称之为命运。”—卡尔荣格 心智模式深藏于我们内心之中&#xff0c;它潜移默化地影响着我们对世界的理解和判断。往往这些影响是如此隐蔽&#xff0c;以至于我们自己都未必察觉到是什么在驱动我们的选择、决策…

【Entity Framework】聊聊EF中键

【Entity Framework】聊聊EF中键 文章目录 【Entity Framework】聊聊EF中键一、概述二、配置主键2.1 约定配置主键2.2 单个属性配置为实体主键2.3 组合主键 三、主键名称四、键类型和值五、备用键 一、概述 键用作每个实体实例的唯一标识符。EF中的大多数实体都有一个键&#…

线程池阻塞队列的选择

一、背景 想起前两年被问到阻塞队列怎么选&#xff0c;有界是必然的&#xff0c; ArrayBlockingQueue、LinkedBlockingQueue怎么选呢。 二、打开源码看看 ArrayBlockingQueue arrayBlockingQueue new ArrayBlockingQueue(3);LinkedBlockingQueue linkedBlockingQueue new Lin…

VPP 负载均衡测试代码

1. 均衡的测试思想和流程说明。 先说一下理论&#xff0c; 然后后边才知道 代码逻辑。 调试了两天&#xff0c;这个代码终于通了。 由于时间关系&#xff0c; 画了一个粗略的图。另外这个代码只是流程通了&#xff0c;不过要帮助理解负载均衡我认为已经足够了。 下面是windo…

QT Creator概览

&#x1f40c;博主主页&#xff1a;&#x1f40c;​倔强的大蜗牛&#x1f40c;​ &#x1f4da;专栏分类&#xff1a;QT❤️感谢大家点赞&#x1f44d;收藏⭐评论✍️ 目录 一、Qt Creator 概览 ①&#xff1a;菜单栏 ②&#xff1a;模式选择 ③&#xff1a;构建套件选择器…

STL--容器

vector&#xff08;向量&#xff09; 优点&#xff1a;支持随机访问&#xff0c;所以查询效率高&#xff1b;尾部插入和删除操作效率高。 缺点&#xff1a;向非尾部插入或删除元素时&#xff0c;由于可能需要移动内存中的元素&#xff0c;效率较低&#xff1b;空间大小动态增长…

【Keil5-Debug和发布版本配置】

Keil5-Debug和发布版本配置 ■ Keil5-Debug和发布版本配置■ 一&#xff1a;sct文件 sct文件配置■ 二&#xff1a;发布版本不需要在 C/C&#xff0c;Asm&#xff0c;Linker&#xff0c;中添加 CMDDEBUG 宏定义。■ 三&#xff1a;Debug版本需要在Linker添加 --pd"-DCMDDE…