树(二叉树)

news2024/9/25 3:28:45

1.1 特性

1.1.1 什么是树

树(Tree)是(n>=0)个节点的有限集合T,它满足两个条件:

(1) 有且仅有一个特定的称为根(Root)的节点。

  1. 其余的节点可以分为m(m≥0)个互不相交的有限集合T1、T2、……、Tm,其中每一个集合又是一棵树,并称为其根的子树(Subtree)。

树的特性:层次关系,一对多,每个节点最多有一个前驱,但是可以有多个后继(根节点无前驱,叶节点无后继)。

关于树的节点:和链表类似,树存储结构中也将存储的各个元素称为 "结点"。

1.1.2 关于树的一些术语

  1. 度数:一个节点的子树的个数 (一个节点有几个孩子为该节点度数)     
  2. 树度数:树中节点的最大度数
  3. 叶节点或终端节点: 度数为零的节点       
  4. 分支节点:度数不为零的节点 (A B C D E H)
  5. 内部节点:除根节点以外的分支节点 (去掉根和叶子)
  6. 节点层次:  根节点的层次为1,根节点子树的根为第2层,以此类推
  7. 树的深度或高度: 树中所有节点层次的最大值

1.2 二叉树

最多只有俩孩子的树,并且分为左孩子和右孩子。

1.2.1 什么是二叉树

二叉树(Binary Tree)是n(n≥0)个节点的有限集合,它或者是空集(n=0), 或者是由一个根节点以及两棵互不相交的、分别称为左子树和右子树的二叉树组成。

二叉树与普通有序树不同,二叉树严格区分左孩子和右孩子,即使只有一个子节点也要区分左右。

1.2.2 二叉树性质(重点)

  1. 二叉树第k(k>=1)层上的节点最多为2的k-1次幂 // 2^(k-1)
  2. 深度为k(k>=1)的二叉树最多有2的k次幂-1个节点。//满二叉树的时候

 做多的节点数 2^k-1

  1. 在任意一棵二叉树中,树叶的数目比度数为2的节点的数目多一。

设度数为0的节点数为n0,度数为1的节点数为n1以及度数为2的节点数为n2,则:

总节点数为各类节点之和: n = n0 + n1+ n2

总节点数为所有子节点数加一:n = n0*0 + n1*1 + n2*2 + 1

下面式子减上面式子得: 0 = -n0 + n2 +1 ==> n0 = n2 + 1

1.2.3 满二叉树和完全二叉树

满二叉树: 深度为k(k>=1)时节点数为2^k - 1(2的k次幂-1)

完全二叉树: 只有最下面两层有度数小于2的节点,且最下面一层的叶节点集中在最左边的若干位置上。(先挂树的左边向右, 从上向下挂)

1.2.4 二叉树的存储结构

  1. 二叉树的顺序存储结构

顺序存储结构 :完全二叉树节点的编号方法是从上到下,从左到右,根节点为1号节点。设完全二叉树的节点数为n,某节点编号为i:

  • 当i>1(不是根节点)时,有父节点,其父节点编号为i/2;
  • 当2*i<=n时,有左孩子,其编号为2*i ,否则没有左孩子,本身是叶节点;
  • 当2*i+1<=n时,有右孩子,其编号为2*i+1 ,否则没有右孩子;

有n个节点的完全二叉树可以用有n+1 个元素的数组进行顺序存储,节点号和数组下标一一对应,下标为零的元素不用。

利用以上特性,可以从下标获得节点的逻辑关系。不完全二叉树通过添加虚节点构成完全二叉树,然后用数组存储,

  1. 二叉树的遍历(重点)

前序: 根 ----> 左 -----> 右

中序:  左 ----> 根 -----> 右

后序:  左 ----> 右 -----> 根

例如:

前序: A B C D E F G H K

中序:B D C A E H G K F

后序:D C B H K G F E A

练习:

已知遍历结果如下,试画出对应的二叉树。

前序: A B C E H F I J D G K

中序:A H E C I F J B D K G

提示:用前序确定根节点,然后用中序找到根节点然后再找左右子。

最后给大家几个练习,可以检验一下所学内容。

(1) 深度为8的二叉树,其最多有( 2^8-1 ) 个节点,第8层最多有( 2^7 )个节点

(2) 数据结构中,沿着某条路线,一次对树中每个节点做一次且仅做一次访问,对二叉树的节点从1开始进行连续编号,要求每个节点的编号大于其左、右孩子的编号,同一节点的左右孩子中,其左孩子的编号小于其右孩子的编号,可采用( )次序的遍历实现编号(网易)

A 先序 B 中序 C 后序 D 从根开始层次遍历

(3)一颗二叉树的 前序: A B D E C F, 中序:B D A E F C 问树的深度是 ( ) 

A 3 B 4 C 5 D 6

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

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

相关文章

【Docker】Linux系统以及威联通QNAP部署思源笔记的通用教程

本文首发于 ❄️慕雪的寒舍 本文测试的是旧版本v2.11.4的部署方式&#xff0c;实测当前&#xff08;2024.08.15&#xff09;最新的v3.1.3版本也可以用相同的方式部署。本文的部署方式共写了三种&#xff0c;非qnap的linux系统也可以参考本文部署思源笔记。 阅读本文之前&#…

SpringBoot 集成积木报表

SpringBoot 集成积 前言 积木报表是jeecg的一款开源但代码不开源的一款自定义报表&#xff0c;可以基于网页灵活 调整报表的布局、样式等内容&#xff0c;无需编程&#xff0c;专为企业数据分析、报表制作而设计&#xff1b; 降低管理人员汇总制作报表的门槛&#xff0c;解决…

在表格上,按照单元格数值显示单元格背景进度条

想要实现的效果如下&#xff1a; 单元格背景进度条的大小取决于当前单元格里的数值 TreeList和GridControl的设置方法都是相同的&#xff1a;都是通过给列设置FormatRule来实现的。 相关代码及设置如下&#xff1a; 1、给控件绑定数据源&#xff0c;我的数据源是一个DataTab…

25届网安秋招,信息泄露常问之配置信息泄露

吉祥知识星球http://mp.weixin.qq.com/s?__bizMzkwNjY1Mzc0Nw&mid2247485367&idx1&sn837891059c360ad60db7e9ac980a3321&chksmc0e47eebf793f7fdb8fcd7eed8ce29160cf79ba303b59858ba3a6660c6dac536774afb2a6330#rd 《网安面试指南》http://mp.weixin.qq.com/s?…

基于STM32开发的智能花园灌溉系统

目录 引言环境准备工作 硬件准备软件安装与配置系统设计 系统架构硬件连接代码实现 系统初始化土壤湿度监测与处理灌溉控制与状态指示Wi-Fi通信与远程监控应用场景 家庭花园智能灌溉农业田地的智能灌溉管理常见问题及解决方案 常见问题解决方案结论 1. 引言 随着智能家居技术…

录屏神器!一键搞定视频录制,小白也能轻松上手

在工作当中录制会议内容或者看电影录制精彩瞬间、学习时录制网课的重点部分等等都是需要借助可以实现屏幕录制的工具&#xff0c;让我们的日常更加精彩并且有回忆的记录&#xff0c;今天就来给大家整理了四款好用的录屏工具&#xff0c;实现保存高清、流畅的电脑屏幕的精彩记录…

重定向

重定向原理 #include <stdio.h> #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdlib.h> int main() { close(1); int fd open("myfile", O_WRONLY|O_CREAT, 00644); if(fd < 0){ perror("o…

V-ASSISTANT软件无法设置V90伺服软限位

使用V-ASSISTANT软件配置V90伺服参数时&#xff0c;软限位功能是灰色且未勾选&#xff0c;无法设置软限位&#xff0c;如下图所示&#xff1a; 原因&#xff1a;设置零点位置之后需要在PLC中激活软限位&#xff08;如FB284中ConfigEPOS管脚的Bit2&#xff09; FB284中的Confi…

python学习之路 - pyecharts快速入门

目录 一、pyecharts入门1、pyecharts模块介绍a、概况 2、pyecharts基础入门&#xff08;以折线图为例&#xff09;a、安装依赖b、创建折线图c、常用配置项 3、pyecharts创建柱状图a、创建基本柱状图b、创建反转柱状图c、创建含有时间线的柱状图 4、pyecharts地图可视化a、生成中…

WSL-ubuntu下载安装配置cudnn

下载 安装cuDnn的话需要和CUDA版本对应&#xff0c;可参考官网&#xff1a; cuDNN Archive | NVIDIA Developer 我的cuda是11.8 这个cuDNN8.9.7_Linux直接下载&#xff1a; https://developer.nvidia.com/downloads/compute/cudnn/secure/8.9.7/local_installers/11.x/cudn…

无人机技术的最新进展及未来趋势

一、飞行控制技术的提升 复杂环境下的稳定性&#xff1a;现代无人机在飞行控制系统方面的升级&#xff0c;使其能在复杂环境中稳定飞行&#xff0c;例如强风条件下或狭窄空间内。 智能避障系统&#xff1a;新型无人机配备有高精度的传感器和先进的算法&#xff0c;能够实现自…

vue3快速入门(一)新建项目与安装插件

步骤很详细&#xff0c;直接上教程 在对应路径下&#xff0c;cmd输入npm create vuelatest,然后按图所示进行选择&#xff08;仅供新手参考&#xff09; 安装以下插件 3.重启vscode&#xff08;为了确保插件生效&#xff09; 4.在vscode启动内置终端 输入npm i或pnpm i安装依赖…

浅谈 mysql 单、双引号的3种用法

mysql 单引号和双引号的使用&#xff0c;主要有以下3种情形 1、在引用字符型或日期类型的值时使用。 2、使用 as 创建别名时使用&#xff0c;别名如含特殊字符&#xff0c;则必须使用单引号或双引号。 3、解决数据原文中存在的单双引号问题。 注&#xff1a;本文所指的单、…

【Docker】Docker学习01 | 什么是docker?

本文首发于 ❄️慕雪的寒舍 因为本人没有学习过docker&#xff0c;虽然部署过很多镜像&#xff0c;但是对于docker底层的实现一概不知。趁学习一个新项目的契机&#xff0c;将docker的相关概念了解清楚。 安装docker的教程请查看 Linux主机安装docker。 如果你想和我一起学习do…

内存管理篇-02内存硬件电路和接口

1. 内存硬件实现机制 通过D触发器构建寄存器和内存的结构对比,这里主要先表达sram复杂&#xff0c;dram简单。 2. sram和ddr sdram结构图对比 主要是想对比sram和dram在和CPU连接过程的差异。sram需要的地址线较多&#xff0c;dram需要的较少&#xff0c;但是需要多次发送&…

如何用Python进行民宿数据分析?可视化工具应用教程

&#x1f393; 作者&#xff1a;计算机毕设小月哥 | 软件开发专家 &#x1f5a5;️ 简介&#xff1a;8年计算机软件程序开发经验。精通Java、Python、微信小程序、安卓、大数据、PHP、.NET|C#、Golang等技术栈。 &#x1f6e0;️ 专业服务 &#x1f6e0;️ 需求定制化开发源码提…

微信小游戏授权问题

微信小程序获取用户相关信息的接口&#xff0c;如wx.getUserCloudStorage&#xff0c;报错&#xff1a;please go to mp to announce your privacy usage。 需要在微信公众平台设置用户隐私保护。

CentoOS 7下配置并部署 DataX 3.0与DataX-web

数据同步框架 DataX DataX本身作为离线数据同步框架,采用 Framework plugin架构构建。将数据源读取和写入抽象成为Reader/ Writer插件,纳入到整个同步框架中。 Reader: Reader为数据采集模块,负责采集数据源的数据,将数据发送给 Framework。 Writer: Writer为数据写入模块,负责…

一种间距可调式在线测宽仪!

关键词&#xff1a;在线测宽仪,测宽仪,板材测宽仪,板材 我们都知道&#xff0c;在板材生产线中&#xff0c;为了应对多方市场需求&#xff0c;生产的板材规格众多&#xff0c;甚至宽度范围相差甚大。而现在应用于产线的在线测宽仪多为光学测量方式&#xff0c;这也就意味着&…

Nginx: 配置项之access模块、auth_basic模块、auth_request模块

access模块 用于限定特定IP或者是网段进行访问的&#xff0c;从而实现Nginx的一个访问权限控制这个模块&#xff0c;它仅能够针对IP或者网段的一个访问 1 &#xff09;指令集 1.1 allow 语法结构: allow address | CIDR | UNIX | all all 是放行所有address 可以是 ip 地址…