【数据结构】树

2023-05-16

一、树

1、什么是树?

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

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

树(tree)是包含n(n>0)个结点的有穷集,其中:

(1)每个元素称为结点(node);

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

(3)除根结点之外的其余数据元素被分为m(m≥0)个互不相交的集合T1,T2,……Tm-1,其中每一个集合Ti(1<=i<=m)本身也是一棵树,被称作原树的子树(subtree)。

2、相关术语

  • 节点的度:一个节点含有的子树的个数称为该节点的度;
  • 叶节点或终端节点:度为0的节点称为叶节点;
  • 非终端节点或分支节点:度不为0的节点;
  • 双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
  • 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
  • 兄弟节点:具有相同父节点的节点互称为兄弟节点;
  • 树的度:一棵树中,最大的节点的度称为树的度;
  • 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
  • 树的高度或深度:树中节点的最大层次;
  • 堂兄弟节点:双亲在同一层的节点互为堂兄弟;
  • 节点的祖先:从根到该节点所经分支上的所有节点;
  • 子孙:以某节点为根的子树中任一节点都称为该节点的子孙。
  • 森林:由m(m>=0)棵互不相交的树的集合称为森林;

二、二叉树

1、什么是二叉树?

二叉树,就是度不超过2的树(节点最多有两个叉)。

2、两种特殊的二叉树

满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。

完全二叉树:叶节点只能出现在最下层和次下层,并且最下面一层的结点都集中在该层最左边的若干位置的二叉树。

满二叉树一定是完全二叉树,但是完全二叉树不一定是满二叉树。

三、树的遍历

前序遍历:先从根部出发,然后由左向右,一颗一颗树来完成遍历。先访问根再访问叶子结点,这就是我画出来的前序遍历图,箭头的方向表示遍历的顺序。a为起点。(根节点->左子树->右子树)

结果是:1、2、5、6、7、3、4、8、9、10

结果是:1、2、4、5、7、8、3、6。 

后序遍历:顾名思义,就是从叶子结点出发,先遍历叶子结点再到根结点,最后到父结点。我画出顺序可能会更直观点。 (左子树->右子树->根节点)

结果是:5、6、7、2、3、9、10、8、4、1

 结果是:4、8、7、5、2、6、3、1

层次遍历:按0层、1层、2层、3层,从左到右来遍历

结果是:1、2、3、4、5、6、7、8、9、10

结果是:1、2、3、4、5、6、7、8 

中序遍历:(左子树->根节点->右子树

 结果是:4,2,7,8,5,1,3,6。 

四、堆

堆是计算机科学中一类特殊的数据结构的统称。堆通常是一个可以被看做一棵树的数组对象。堆总是满足下列性质:

  • 堆中的某个节点的值总是不大于或不小于其父节点的值(不大于则为大根堆,不小于则为小根堆)。
  • 堆总是一棵完全二叉树。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【数据结构】树 的相关文章

随机推荐

  • 【Buildroot】学习记录(2)配置注释

    文章目录 一 前言二 Buildroot目录结构三 Buildroot配置选项四 Target options 目标选项 五 Build options 编译选项 六 Toolchain 工具链 七 System configuration
  • oracle alter table详解

    建测试表 create table dept deptno number 3 primary key dname varchar2 10 loc varchar2 13 create table employee info empno nu
  • 【目录】音视频开发笔记

    音视频开发 基础知识 xff1a 音频基础 音视频开发 基础知识 xff1a 视频简介 音视频开发 基础知识 xff1a 视频封装格式和编码格式 音视频开发 基础知识 xff08 1 xff09 音视频开发 基础知识 xff08 2 xff
  • 串口通信之(一)获取传感器数据(modbus rtu master)

    一天领导拿了几个传感器设备丢给我 xff0c 给我把这些数据取到 我一看 xff0c 好家伙 这是要搞硬件了啊 那就搞他丫的 可是 xff0c 怎么搞是个问题 我是一头雾水 还好 xff0c 和传感器丢给我的 xff0c 还有传感器厂家一起
  • 小觅深度版-realsense系列,深度相机对比

    本文为CSDN原创文章 xff0c 转载请注明出处 本文为CSDN原创文章 xff0c 转载请注明出处 本文对比了目前小觅生产的深度版 xff08 120 xff09 相机 Realsense D435以及 Realsense ZR300
  • VIO单目评测算法:A Benchmark Comparison of Monocular Visual-Inertial Odometry Algorithms for Flying Robots

    A Benchmark Comparison of Monocular Visual Inertial Odometry Algorithms for Flying Robots 飞行器单目VIO算法测评 算法方面总结 xff1a MSCK
  • LVM调整home剩余空间到root分区

    注意 xff1a 1 此方法为LVM逻辑卷调整 xff0c 请确认是否为逻辑卷分区 xff0c 且文件系统格式为ext4或者xfs 2 减少home分区会将home分区格式化 xff0c 请先备份home分区 xff0c 但是放心增加的ro
  • git clone 指定某个分支而不是整个版本仓库

    最近在搭建Gitblit内网仓库时发现一个问题 xff0c git clone 只能clone整个仓库 xff0c 但是如果我只需要仓库里面的某一个分支 xff0c 这时还需要clone整个仓库就很头疼 xff0c 下面用这个命令就可实现c
  • 十九、I2C驱动及应用

    一 概述 1 Linux主机驱动和外设驱动分离思想 外设驱动 API 主机驱动 板级逻辑 具体的i2c设备 xff08 camera xff0c ts xff0c eeprom等等 xff09 主机驱动 xff1a 根据控制器硬件手册 xf
  • 内核驱动的本质——模块

    内核驱动的本质 模块 在Linux中 xff0c 驱动的本质就是一个模块 模块可以被选择 静态编译 或 模块化编译 1 静态编译 xff1a 链接入内核镜像 xff0c 默认永远被加载 2 模块化编译 xff1a 需要在内核运行时动态加载
  • 【STM32知识点】关于串口接收中断(回调函数)

    串口使用流程 xff1a 1 初始化串口 2 使能中断 xff08 在非阻塞模式下接收一定量的数据 xff09 HAL UART Receive IT UART HandleTypeDef huart uint8 t pData uint1
  • 最近看书少了,以后要多看书

    最近两周的oracle学习都是围绕csdn上oracle板块中遇到的问题 xff1b 看书少了 xff0c 遇到不懂的知识 xff0c 查询书籍 xff0c 查询网络的次数多了 xff1b 于是与电脑一起度过的时间 xff0c 占了大约9
  • 【STM32Cube HAL】定时器中断(四)

    实验内容 xff1a 使用基本定时器 xff0c 实现LED灯以1S间隔进行亮灭切换 一 原理图 二 CubeMX配置 Step1 打开 STM32CubeMX xff0c 点击 New Project xff0c 选择芯片型号 xff0c
  • 【STM32Cube HAL】输入捕获(六)——PWM测量

    对于PWM的捕获 xff0c 我这里一共使用两种方法实现 xff1a 第一种是PWM输入模式 xff0c 采用一个定时器的两个通道 xff08 通道一和通道二 xff09 xff0c 配置从模式为复位模式 xff0c 没有进行溢出处理 xf
  • 【STM32知识点】关于不同外设中断标志位清除的使用笔记(更新中)

    在使用中断函数的时候 xff0c 我们往往忘记在中断服务函数内清除中断标志位而导致一些未知错误 以下我总结了几个外设关于中断标志位的清除问题 定时器 xff1a 1 在程序有使用到中断的情况下 xff0c 定时器在使能之前需要先清除更新中断
  • 【FreeRTOS 应用开发笔记】软件定时器(九)

    一 软件定时器的基本概念 1 硬件定时器和软件定时器的主要区别 定时器 xff0c 是指从指定的时刻开始 xff0c 经过一个指定时间 xff0c 然后触发一个超时事件 xff0c 用户可以自定义定时器的周期与频率 硬件定时器 xff1a
  • 【STM32知识点】STM32基础知识总结

    目录 认识STM32 GPIO外设 一 GPIO的八种工作模式 二 总结在STM32中选用IO模式 RCC时钟 NVIC是嵌套向量中断控制器 一 优先级定义 二 优先级分组 EXTI外部中断 事件控制器 SysTick系统定时器 通讯的基本
  • 【数据结构】排序

    本文主要选取了桶排序 xff0c 冒泡排序 xff0c 以及快速排序 当然还有其他几种 xff0c 可以根据需要进行学习 一 桶排序 1 什么是桶排序 xff1f 桶排序是计数排序的升级版 它利用了函数的映射关系 xff0c 高效与否的关键
  • 【数据结构】栈,队列,链表

    一 队列 队列 xff0c 顾名思义 xff0c 就像排队一样 xff0c 我们只能在队首删除 xff0c 在队尾增加 队列是一种先进先出 xff08 FIFO xff09 的数据结构 队列的存储方式可以使用线性表进行存储 xff0c 也可
  • 【数据结构】树

    一 树 1 什么是树 xff1f 树状图是一种数据结构 xff0c 它是由n xff08 n gt 61 1 xff09 个有限节点组成一个具有层次关系的集合 把它叫做 树 是因为它看起来像一棵倒挂的树 xff0c 也就是说它是根朝上 xf