数据结构-----树和二叉树必知必会知识

目录

前言

思维导图

一.树

树的定义

二.二叉树

1.二叉树的定义

2.二叉树的形态(图)

3.二叉树的性质

三.满二叉树

1.定义

2.特点和性质

 四.完全二叉树

1.定义

2.特点和性质


 

前言

        今天开始我们就学习新的数据结构类型啦!没错它就是大名鼎鼎的树状结构,其实在学习数据结构之前或者在学习C语言的时候我们都听说过树和二叉树,但是我们却没有去深入探讨过这种数据结构类型的相关性质和方法,我个人也是一样的,那从现在开始我们就开始去正式学习这种新的数据结构类型吧!

思维导图

320815c9fbc645b3a9e05a1310141521.png

一.树

树的定义

简介

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

每个节点有零个或多个子节点;没有父节点的节点称为根节点;每一个非根节点有且只有一个父节点;除了根节点外,每个子节点可以分为多个不相交的子树。

定义 

树(tree)是包含 n(n≥0) [2] 个节点,当 n=0 时,称为空树,非空树中

条边的有穷集,在非空树中:

(1)每个元素称为节点(node)。

(2)有一个特定的节点被称为根节点或树根(root)。

(3)除根节点之外的其余数据元素被分为多个互不相交的集合

空集合也是树,称为空树。空树中没有节点;

1.孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;

2.节点的度:一个节点含有的子节点的个数称为该节点的度;

3.叶节点或终端节点:度为0的节点称为叶节点;

4.非终端节点或分支节点:度不为0的节点;

5.双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;

6.兄弟节点:具有相同父节点的节点互称为兄弟节点;

7.树的度:一棵树中,最大的节点的度称为树的度;

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

9.树的高度或深度:树中节点的最大层次;

10.堂兄弟节点:双亲在同一层的节点互为堂兄弟;

11.节点的祖先:从根到该节点所经分支上的所有节点;

12.子孙:以某节点为根的子树中任一节点都称为该节点的子孙;

13.有序树:树中的节点各子树从左到右是有次序的

14.森林:由多棵互不相交的树的集合称为森林

 示意图:7a88afe7e1d24c30bc84f25a0020ce58.png

二.二叉树

    二叉树(Binary tree)是树形结构的一个重要类型。许多实际问题抽象出来的数据结构往往是二叉树形式,即使是一般的树也能简单地转换为二叉树,而且二叉树的存储结构及其算法都较为简单,因此二叉树显得特别重要。二叉树特点是每个节点最多只能有两棵子树,且有左右之分 。

        二叉树是n个有限元素的集合,该集合或者为空、或者由一个称为根(root)的元素及两个不相交的、被分别称为左子树和右子树的二叉树组成,是有序树。当集合为空时,称该二叉树为空二叉树。在二叉树中,一个元素也称作一个节点

1.二叉树的定义

        定义二叉树(binary tree)是指树中节点的度不大于2的有序树,它是一种最简单且最重要的树。二叉树的递归定义为:二叉树是一棵空树,或者是一棵由一个根节点和两棵互不相交的,分别称作根的左子树和右子树组成的非空树;左子树和右子树又同样都是二叉树 。

1、每个结点最多有俩孩子(二叉树中不存在度大于 2 的结点)
2、子树有左右之分,其次序不能颠倒。
3、二又树可以是空集合,根可以有空的左子树或空的右子树。
 

 注意:

1.二叉树不是树的特殊情况,它们是两个概念又树结点的子树要区分左子树和右子树,即使只有一棵子树也要进行区分,说明它是左子树,还是右子树

2.树当结点只有一个孩子时,就无须区分它是左还是右的次序。因此二者是不同的。这是二叉树与树的最主要的差别。

3.具有两个结点的树只有一种状态具有两个结点的二叉树有两种状态(也就是二又树每个结点位置或者说次序都是固定的,可以是空,但是不可以说它没有位置,而树的结点位置是相对于别的结点来说的,没有别的结点时,它就无所谓左右了)

c6dd95b68ce44c70b696a78a77bef2db.png

2.二叉树的形态(图)

fc588b66c1ad401fa1780f00e1658ae1.png

3.二叉树的性质

性质1:二叉树的第i层,至多有 2^(i-1) 个节点(i>=1),最少有1个节点

84b899d6c1644ddda880910d737402b8.png

性质2:一个深度为k的二叉树,最多一共有2^k-1个节点(k>=1),至少有k个节点

d0e4a5538c184504acddca1fc5da0a1b.png

 性质3:对任何一棵二叉树 T 如果其叶子数为 n0,度为2的结点数为 n2,则 n0 = n2 + 1

证明过程如下:

000a1e72dee541d78d6657be7f9a831d.png

分两种情况,首先从下往上看,总边数为B,总节点数为n,那么我们就可以得到 B=n-1;然后从上往下看,度数为2的节点数为n2,度数为1的节点数为n1,那么 B=2*n2+n1 

                        B=n-1=2*n2+n1

                        n=n1+n2+n0

联立课解得: n0=n2+1

三.满二叉树

1.定义

如果一个深度为k的二叉树,其所有的节点总数为2^k-1,那么这个二叉树就是满二叉树

如图所示:128621d7c5114616b509f96ded9fcaad.png

2.特点和性质

特点:

1.每一层上的结点数都是最大结点数 (即每层都满)

2.叶子节点全部在最底层

 对满二叉树结点位置进行编号编号规则:

1.从根结点开始,自上而下,自左而右。

2.每一结点位置都有元素

 四.完全二叉树

1.定义

当且仅当其每一个结点都与深深度为k的具有n个结点的二又树,度为k的满二又树中编号为 1~n 的结点一- 对应时,称之为完全叉树。

56b53872551e49339334d9a57ceb6870.png

注意:

满二叉树是一个完全二叉树,但是完全二叉树不一定是满二叉树。如果满二叉树从最后一个节点开始连续去掉任意一个节点那就是一个完全二叉树(一定是连续去掉的!)

2.特点和性质

特点:

1.叶子只可能分布在层次最大的两层上
2.对任一结点,如果其右子树的最天层次为i.则其左子树的最大层次必为i或i+ 1

3.具有n个节点的完全二叉树,其深度为log2n+1

以上就是本期的全部内容了,我们下一期继续学习二叉树的其他内容,下次见!

分享一张壁纸: ae7fecef3cba468f93be047c49512efd.png

 

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

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

相关文章

python安全工具开发笔记(四)——python网络编程

一、C/S架构 什么是C/S架构 C : Client S : Server。客户机和服务器结构。 Server 唯一的目的就是等待Client 的请求,Client 连上 Server 发送必要的数据,然后等待Server端完成请求的反馈。 C/S网络编程 Server端进行设置,首先创建一个通信…

【LeetCode75】第六十三题 不同路径

目录 题目: 示例: 分析: 代码: 题目: 示例: 分析: 题目给我们返回地图的长和宽。问我们从地图的左上走到右下有几种方法。我们只能往下走或是往右走。 这个算是简单的二维动态规划题了。 …

RabbitMQ生产故障问题分析

1. 问题引发 由某个服务BI-collector-xx队列出现阻塞,影响很整个rabbitMQ集群服务不可用,多个应用MQ生产者服务出现假死状态,系统影响面较广,业务影响很大。当时为了应急处理,恢复系统可用,运维相对粗暴的把…

华为OD机试 - 相同数字组成图形的周长 - 矩阵(Java 2023 B卷 100分)

目录 专栏导读一、题目描述二、输入描述三、输出描述四、Java算法源码五、效果展示1、输入2、输出 华为OD机试 2023B卷题库疯狂收录中,刷题点这里 专栏导读 本专栏收录于《华为OD机试(JAVA)真题(A卷B卷)》。 刷的越多…

docker容器

虚拟化产品 1.奇居架构 2.原生架构 1.支持仿真虚拟化(对系统硬件没有要求,性能最低)vmware个人在windows支持 vmware workstationvmware fusion MAC2.全虚拟化产品,直接使用物理硬件、性能高 exic(操作系统&#xff0…

CentOS 7 制作openssl 1.1.1w 版本rpm包 —— 筑梦之路

源码下载地址: https://www.openssl.org/source/openssl-1.1.1w.tar.gz 参考之前的文章: openssl 1.1.1L /1.1.1o/1.1.1t rpm包制作——筑梦之路_openssl的rpm包_筑梦之路的博客-CSDN博客 直接上spec文件: Name: openssl Version: 1.1…

【差旅游记】初见乌海湖

哈喽,大家好,我是雷工。 最近在乌海出差,有幸见到了传说中在沙漠中看海的“黄河明珠”——乌海湖。 前段时间一直有点忙,现在有点时间,趁还没忘光,简单整理记录下。 那是在上个月,2023年8月8号…

【大虾送书第十一期】适合新手自学的网络安全基础技能“蓝宝书”:《CTF那些事儿》

目录 🥮写在前面 🥮内容简介 🥮读者对象 🥮专家推荐 🥮目录 🥮文末福利 🦐博客主页:大虾好吃吗的博客 🦐专栏地址:免费送书活动专栏地址 写在前面 CTF比赛是快…

Leetcode 887. 鸡蛋掉落

文章目录 题目代码&#xff08;9.25 首刷看解析&#xff09; 题目 Leetcode 887. 鸡蛋掉落 代码&#xff08;9.25 首刷看解析&#xff09; class Solution { public:unordered_map<int, int> memo;int superEggDrop(int K, int N) {return dp(K, N);}int dp(int k, int…

【从入门到起飞】JavaSE—方法引用

&#x1f38a;专栏【JavaSE】 &#x1f354;喜欢的诗句&#xff1a;更喜岷山千里雪 三军过后尽开颜。 &#x1f386;音乐分享【The truth that you leave】 &#x1f970;欢迎并且感谢大家指出我的问题 文章目录 &#x1f354;概述&#x1f354;注意&#x1f388;如何确定是否是…

Java实现byte数组与Hex互转

十六进制字符的输出大写字符&#xff1a;0123456789ABCDEF 十六进制字符的输出小写字符&#xff1a;0123456789abcdef下面使用十六进制大写字符。 1、方式1 public class HexStringUtils {private static final char[] HEX_CHAR_TABLE {0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B,…

LabVIEW在运行时调整表控件列宽

LabVIEW在运行时调整表控件列宽 如何在LabIEW中运行时调整表控件的列宽大小&#xff1f; 在VI运行时&#xff0c;有两种不同的方法可以更改表中列的宽度。首先&#xff0c;可以使用鼠标手动更改它们;其次&#xff0c;可以从框图中以编程方式更改它们。 手动更改列宽 只有在…

Feign 使用篇

Feign是一个声明式的HTTP客户端工具&#xff0c;它简化了在分布式系统中进行服务间通信的过程。开发人员可以使用Feign来定义接口&#xff0c;然后通过该接口来调用远程服务&#xff0c;就像调用本地方法一样简单。 目录 Feign的一些关键特性和概念&#xff1a;openfeign 对比 …

【高云FPGA系列教程(11):MultiButton按键驱动模块移植】

文章目录 1. MultiButton简介2. MultiButton代码获取3. MultiButton移植4. 测试与运行本文是高云FPGA系列教程的第11篇文章。 1. MultiButton简介 MultiButton, 一个小巧简单易用的事件驱动型按键驱动模块,可无限量扩展按键,按键事件的回调异步处理方式可以简化你的程序结构…

https跳过SSL认证时是不是就是不加密的,相当于http?

https跳过SSL认证时是不是就是不加密的,相当于http?&#xff0c;其实不是&#xff0c;HTTPS跳过SSL认证并不相当于HTTP&#xff0c;也不意味着没有加密。请注意以下几点&#xff1a; HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;本质上是在HTTP的基础上…

zabbix

利用一个优秀的监控软件可以: 通过一个友好的界面进行浏览整个网站所有的服务器状态 可以在 Web 前端方便的查看监控数据 可以回溯寻找事故发生时系统的问题和报警情况 zabbix 是什么&#xff1f; zabbix 是一个基于 Web 界面的提供分布式系统监视以及网络监视功能的企业级…

数字人惯性动作捕捉技术服务,激发吉祥物IP创新活力

近日&#xff0c;2023年成都市全国科普日主场活动启动仪式中&#xff0c;全球首发全国首个科普数字人形象大使“科普熊猫”&#xff0c;在大会活动现场&#xff0c;数字人“科普熊猫”结合惯性动作捕捉技术&#xff0c;与现场主持人、观众进行实时互动交流&#xff0c;以虚实结…

maven入门

作用 项目管理工具&#xff1a;依赖管理&#xff0c;项目构建 具体解决的问题 便于添加依赖自动化构建项目多模块开发 相关概念 本地仓库-》私服-》镜像/远程仓库&#xff08;中央仓库&#xff09; 依赖 依赖的范围 compiletestprovidedruntimesystem主程序是否是否否测…

Unity丨自动巡航丨自动寻路丨NPC丨

文章目录 概要功能展示技术细节小结 概要 提示&#xff1a;这里可以添加技术概要 本文功能是制作一个简单的自动巡逻的NPC&#xff0c;随机自动寻路。 功能展示 技术细节 using UnityEngine;public class NPCController : MonoBehaviour {public float moveSpeed 5.0f; // …