算法通关村第六关-白银挑战树

news2024/11/26 20:34:45

大家好我是苏麟 , 今天聊聊树 .

大纲

    • 树的概念
      • 二叉树
        • 满二叉树
        • 完全二叉树
    • 树的性质
    • 树的定义与存储方式
    • 树的遍历

树的概念

树是我们计算机中非常重要的一种数据结构,同时使用树这种数据结构,可以描述现实生活中的很多事物,例如家谱、单位的组织架构、等等。
树是由n(n>=1)个有限结点组成一个具有层次关系的集合。把它叫做“树”是因为它看起来像一棵倒挂的树,也就是说它是根朝上,而叶朝下的。

更好的理解 :

如企业里的职级关系 :
在这里插入图片描述
如一本书的目录 :

在这里插入图片描述

下面这张图,就是一个标准的树结构 :

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

树具有以下特点:

1.每个结点有零个或多个子结点
2.没有父结点的结点为根结点
3.每一个非根结点只有一个父结点
4.每个结点及其后代结点整体上可以看做是一棵树,称为当前结点的父结点的一个子树

参考上面的结构,可以很方便的理解树的如下概念:

1.节点的度:一个节点含有子节点的个数称为该节点的度
2.树的度:一棵树中,最大的节点的度称为树的度,注意与节点度的区别
3.叶节点或终端节点: 度为0的节点称为叶节点
4.非终端节点或分支节点:度不为0的节点
5.双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点
6.孩子节点或子节点: 一个节点含有的子树的根节点称为该节点的子节点
7.兄弟节点: 具有相同父节点的节点互称为兄弟节点
8.节点的祖先: 从根到该节点所经分支上的所有节点
9.子孙: 以某节点为根的子树中任一节点都称为该节点的子孙
10.森林: 由m(m>=0)棵互不相交的树的集合称为森林
11.无序树:树中任意节点的子节点之间没有顺序关系,这种树称为无序树,也称为自由树
12.有序树:树中任意节点的子节点之间有顺序关系,这种树称为有序树
13.二又树:每个节点最多含有两个子树的树称为二叉树

二叉树

二叉树(binary tree)是树的一种特殊形式。二叉,顾名思义,这种树的每个节点最多有2个孩子节点。注意,这里是最多有2个,也可能只有1个,或者没有孩子节点。

二叉树的结构如图所示 :

在这里插入图片描述

二叉树节点的两个孩子节点,一个被称为左孩子(left child),一个被称为右孩子(right child)。这两个孩子节点的顺序是固定的,就像人的左手就是左手,右手就是右手,不能够颠倒或混淆。

此外,二叉树还有两种特殊形式,一个叫作满二叉树,另一个叫作完全二叉树。

满二叉树

一个二叉树的所有非叶子节点都存在左右孩子,并且所有叶子节点都在同一层级上,那么这个树就是满二叉树。
在这里插入图片描述
简单点说,满二叉树的每一个分支都是满的。

完全二叉树

对一个有n个节点的二叉树,按层级顺序编号,则所有节点的编号为从1到n。如果这个树所有节点和同样深度的满二叉树的编号为从1到n的节点位置相同,则这个二叉树为完全二叉树。

如图 :
在这里插入图片描述
在上图中,二叉树编号从1到12的12个节点,和前面满二叉树编号从1到12的节点位置完全对应。因此这个树是完全二叉树。

完全二叉树的条件没有满二叉树那么苛刻:满二叉树要求所有分支都是满的;
而完全二叉树只需保证最后一个节点之前的节点都齐全即可。

树的性质

性质1: 在二又树的第i层上至多有2^(i-1)个结点 (i>0)
性质2: 深度为k的二又树至多有2^k - 1个结点 (k>0)
性质3: 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则NO=N2+1:
性质4:具有n个结点的完全二叉树的深度必为 log2(n+1)
性质5:对完全二又树,若从上至下、从左至右编号,则编号为i 的结点,其左孩子编号必为2i.
其右孩了编号必为2i+1;其双亲的编号必为i/2 (i= 1 时为根,除外)满二又树和完全二叉树是经常晕的问题,我们有必要单独看一下。满二又树就是如果一棵二叉树只有度为0的节点和度为2的节点,并且度为0的节点在同一层上,则这棵二又树为满二叉树。
在这里插入图片描述
这棵二又树为满二又树,也可以说深度为k=4,有2^k-1=15个节点的二又树。完全二叉树的定义如下:在完全二叉树中,除了最底层节点可能没填满外,其余每层节点数都达到最大 值并且最下面一层的节点都集中在该层最左边的若千位置这个定义最邪乎了,估计大部分看了之后还是不懂什么是完全二叉树,看这个图就知道了:
在这里插入图片描述
前面两棵树的前n-1层都是满的,最后一层所有节点都集中在左侧区域,而且节点之间不能有空隙。最后个为什么不是?因为有一节点缺了一个左子节点。

树的定义与存储方式

定义二叉树 : 一个节点最多可以指向左右两个孩子节点,所以二叉树的每一个节点包含3部分。

  • 存储数据的data变量
  • 指向左孩子的left指针
  • 指向右孩子的right指针
public class Node{
	int value;
	Node left;
	Node right;
}

链式存储结构
在这里插入图片描述
数组存储

在这里插入图片描述
使用数组存储时,会按照层级顺序把二叉树的节点放到数组中对应的位置上。如果某一个节点的左孩子或右孩子空缺,则数组的相应位置也空出来。

对于一个稀疏的二叉树来说,用数组表示法是非常浪费空间的。

树的遍历

这期就到这里 , 下期再见!

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

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

相关文章

01-单节点部署clickhouse及简单使用

1、下载rpm安装包: 官网:https://packages.clickhouse.com/rpm/stable/ clickhouse19.4版本之后只需下载3个rpm安装包,上传到节点目录即可 2、rpm包安装: 安装顺序为conmon->server->client 执行 rpm -ivh ./clickhouse-…

第二十五章 BEV感知系列二(车道线感知)

前言 近期参与到了手写AI的车道线检测的学习中去,以此系列笔记记录学习与思考的全过程。车道线检测系列会持续更新,力求完整精炼,引人启示。所需前期知识,可以结合手写AI进行系统的学习。 BEV感知系列是对论文Delving into the De…

proxifier 2023年11月最新版的安装

前言 Proxifier 是一款功能非常强大的socks5客户端,可以让不支持通过代理服务器工作的网络程序能通过HTTPS或SOCKS代理或代理链。支持64位系统支持Xp,Vista,Win7,支持socks4,socks5,http 代理协议&#xf…

python 深度学习 解决遇到的报错问题8

本篇继python 深度学习 解决遇到的报错问题7-CSDN博客 目录 一、OSError: [WinError 127] 找不到指定的程序。 Error loading "D:\my_ruanjian\conda-myenvs\deeplearning\lib\site-packages\torch\lib\caffe2_detectron_ops.dll" or one of its dependencies. 二、…

婚庆策划小程序制作教程

本文将向你展示如何使用小程序制作平台,轻松制作婚庆策划小程序。只需按照以下步骤操作,你就能拥有自己的专业级婚庆策划小程序。 登录小程序制作平台 首先,你需要登录小程序制作平台。在浏览器搜索乔拓云,然后使用你的账号登录。…

【复盘】记录一次JVM 异常问题 java.lang.OutOfMemoryError: unable to create new native thread

背景是最新运营提了一个需求,需要根据用户信息拉去三分机构的信贷数据,需要达到一天百万级别,但是经过实际测试,也只能达到40W量级,具体就是通过起多个Spring Boot项目,每个项目1S拉一个用户,基…

Docker网络模式_Docker常用命令_以及Docker如何给运行的镜像内容连接互联网_Docker网络模式原理---Docker工作笔记004

然后我们来看一下docker的网络模式: 这个docker我们先看一下电脑上的网络,有两个,1个是lo是测试用的一个是enp0s3这个是我们以太网地址,然后我们去: 安装docker 安装后我们再去ip address可以看到多出来一个网络是docker0 这里ip地址是172.17.0.1这个是私有地址外部无法访问 这…

软件测试必备技能—接口测试

接口测试,其实并没有那么可怕,但是作为测试人员也是必不可少的技能。 接口分为:内部接口和外部接口。 内部接口:是浏览器与服务器的接口。这个很容易理解,web开发一般分前端和后端,前端开发人员用html/cs…

基于Python+Pygame实现一个滑雪小游戏

目录 项目介绍Pygame介绍项目文件夹介绍演示视频代码免费领取 一、项目介绍 使用介绍:运行main.py文件后,通过左右按键可以控制小人的移动,如果经过旗杆那么10分,如果碰到树木那么减50分。 二、Pygame介绍 Pygame是一个用于游…

MS5910PA为行业内领先的可配置10bit到16bit分辨率的旋变数字转换器,可替代AD2S1210

MS5910PA 是一款可配置 10bit 到 16bit 分辨率的旋 变数字转换器。片上集成正弦波激励电路,正弦和余弦 允许输入峰峰值幅度为 2.3V 到 4.0V ,频率范围为 2kHz 至 20kHz 。 转换器可并行或串行输出角度和速度对应的 数字量。 MS5910PA 采…

【解锁未来】探索Web3的无限可能-02

文章目录 什么是Web3 ?Web3对公司的意义? 什么是Web3 ? 简单地说,Web3 是加密货币的延伸,它以新的方式使用区块链来达到新的目的。区块链可以存储钱包中代币的数量、自我执行合同的条款或去中心化应用程序(…

【Python】collections.deque

Python的collections模块是容器数据类型,其中的deque对象是队列容器。返回双向队列对象,类似列表。 from collections import deque[x for x in dir(deque) if not x.startswith(_)] # 结果: [append, appendleft, clear, copy, count, exte…

【Spring MVC】Spring MVC框架的介绍及其使用方法

目录 一、MVC模式 1.1 MVC模式的发展 1.1.1 Model1 模型 1.1.2 Model2 模型 1.2 MVC模式简介 1.模型(Model) 2.视图(View) 3.控制器(Controller) 二、Spring MVC模型简介 三、Spring MVC 六大核心组件 3.1 六大组件简介 1.前端控制器 DispatcherServlet&#xff08…

机器学习(深度学习)轴承故障诊断分类(提供故障数据和python代码实现)

机器学习(深度学习)故障诊断分类(提供故障数据和python代码实现) 轴承故障数据集和python代码自取:https://mbd.pub/o/bread/ZZWTm5hw 摘要:机器学习广泛的应用于机械故障诊断和故障分类问题,本…

全志H6-LicheePi调试记录

LPDDR3:K4E6E304ED-EGCG和K4E6E304ED-EGCF 最高速率不一样,CG是2133MHz,CF是1866MHz

【leetcode】27. 原地移除元素(图解)

目录 1. 思路(图解)2. 代码 题目链接:leetcode 27. 移除元素 题目描述: 需要注意的是,返回的是新数组长度,但是输出的是数组元素。 1. 思路(图解) 思路一:空间换时间…

基于SSM的流浪动物领养系统网站设计与实现

末尾获取源码 开发语言:Java Java开发工具:JDK1.8 后端框架:SSM 前端:采用JSP技术开发 数据库:MySQL5.7和Navicat管理工具结合 服务器:Tomcat8.5 开发软件:IDEA / Eclipse 是否Maven项目&#x…

自动化测试框架知识详解

自动化测试因其节约成本、提高效率、减少手动干预等优势已经日渐成为测试人员的“潮流”,从业人员日益清楚地明白实现自动化框架是软件自动化项目成功的关键因素之一。本篇文章将从什么是真正的自动化测试框架、自动化脚本如何工作以及自动化测试框架会如何在测试过…

手机转接器实现原理,低成本方案讲解

USB-C PD协议里,SRC和SNK双方之间通过CC通信来协商请求确定充电功率及数据传输速率。当个设备需要充电时,它会发送消息去给适配器请求充电,此时充电器会回应设备的请求,并告知其可提供的档位功率,设备端会根据适配器端…

newstarctf2022week2

Word-For-You(2 Gen) 和week1 的界面一样不过当时我写题的时候出了个小插曲 连接 MySQL 失败: Access denied for user rootlocalhost 这句话印在了背景,后来再进就没了,我猜测是报错注入 想办法传参 可以看到一个name2,试着传参 发现有回显三个字段…