树和二叉树的基本概念和性质

news2024/11/18 13:37:18

树和二叉树的基本概念和性质

文章目录

  • 树和二叉树的基本概念和性质
      • 重要概念
      • 树和非树
        • 是树的必要条件
    • 二叉树
      • 二叉树的特点
      • 满二叉树与完全二叉树
      • 二叉树的性质
    • 二叉树存储形式
      • 链式存储
        • 二叉链
        • 三叉链
      • 顺序存储

在这里插入图片描述

重要概念

  • 树是递归定义的

  • 节点的度:一个节点含有子树的个数称为该节点的度,如图中节点R的度为3

  • 叶节点/终端节点:度为零的节点称为叶节点/终端节点,如图中的节点e,f,g,i……

  • 分支节点:度不为零的节点

  • 子节点:一个节点含有的子树的根节点称为该节点的子节点,如图中,m,n是h的子节点

  • 父节点/双亲节点:若一个节点含有子节点,则称这个节点为该子节点的父节点/双亲节点,如图中,d是j,k的父节点

  • 兄弟节点:具有相同的父节点互称为兄弟节点

  • 树的度:一棵树中,最大的节点的度称为该树的度,如图中,该树的度为3

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

  • 树的高度/深度:树中节点的最大层次,如图中,该树的深度为4

tips:结点的层次也可以从零开始计算,但若如此,当树为空树时,树的高度为-1,不符合习惯,因此推荐从1开始算

树和非树

在这里插入图片描述

是树的必要条件

  • 子树不能相交

  • 除根节点外,每个子节点有且仅有一个父节点

二叉树

在这里插入图片描述

二叉树的特点

  • 每个节点最多有两棵子树,即该树不存在度大于2的节点
  • 二叉树的子树有左右之分,不能随意颠倒

满二叉树与完全二叉树

在这里插入图片描述

  • 满二叉树:每一层的节点数都达到最大值。即,如果二叉树的层数为k,则节点总数是2k-1

  • 完全二叉树:是由满二叉树引出来的,假设一完全二叉树的高度为k,则其前k-1个层,节点达到最大值,第k层,节点未达到最大值,但节点从左往右都是连续的

    • 完全二叉树中,只能存在一个度为1的节点

    • 如,此二叉树就不是完全二叉树(因为最后一层节点不是从左往右连续存放)

      在这里插入图片描述

  • 满二叉树是特殊的完全二叉树

二叉树的性质

  • 若规定根节点的层数为1,则一棵非空二叉树的第i层上最多有2(i-1)个节点(即满二叉树的最后一层)
  • 若规定根节点的层数为1,则深度为h的二叉树的最大节点数是2h-1(即满二叉树的节点数)
  • 若规定根节点的层数为1,则具有n个节点的满二叉树的深度h = LogN(推导:n=2h-1 -> 2h=n+1 -> h=log2(n+1))
  • 对任何一棵二叉树,如果度为零结点个数为n0,度为二的结点个数为n2,则有关系式:n0 = n2 + 1

二叉树存储形式

链式存储

  • 链式存储就是指用链来表示一棵二叉树
  • 通常的方法是链表中每个节点由三个域组成:数据域和左右指针域,这是我们常用的二叉链
    • 当然还有更高级,更复杂的三叉链在二叉链的基础上多加了一个指向父节点的指针域

二叉链

typedef struct BinaryTreeNode
{
    struct BinaryTreeNode *left;	//指向左子树
    struct BinaryTreeNode *right;	//指向右子树
}BTNode;

在这里插入图片描述

三叉链

typedef struct BinaryTreeNode
{
    struct BinaryTreeNode *left;	//指向左子树
    struct BinaryTreeNode *right;	//指向右子树
    struct BinaryTreeNode *parent;	//指向父节点
}BTNode;

在这里插入图片描述

顺序存储

  • 顺序结构存储就是使用数组来存储,即用层序的思想将二叉树的节点依次存入数组

  • 一般使用数组只适合表示完全二叉树,因为如果不是完全二叉树会造成空间的浪费

  • 在实际的使用中,只有用到堆的时候才会用数组来存储二叉树,例如堆排序

  • 要明确的一点是,二叉树的顺序存储在物理结构上是一个数组,在逻辑结构上是一棵二叉树

    在这里插入图片描述

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

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

相关文章

k8s kube-proxy详解

一、kube-proxy简介 kube-proxy是kubernetes中网络核心组件,实现了服务暴露和转发等网络功能。kube-proxy支持userspace,ipvs和iptables三种代理模式。userspace性能问题较严重,基本不再使用,应用最多的是iptables和ipvs模式。 …

关于c++ extern关键字

解释和说明参考: (227条消息) C extern关键字_Candyerer的博客-CSDN博客 (227条消息) 对于C中的extern关键字用法的理解_c extern_Fanfan21ya的博客-CSDN博客 个人写了一个案例,代码结构如下 在总结一下 1.a.cpp文件需要引用b.cpp的文件中的变量或…

一文详解!嵌入式软件的自动化测试框架、测试流程与功能研究分析

目录 引言 1.嵌入式软件自动化测试平台分析 2.嵌入式软件自动化测试平台概要设计 3.嵌入式软件自动化测试平台详细设计 3.3 功能设计 引言 嵌入式软件是指被设计用于嵌入或控制另一个产品、设备或系统的软件。它在各种应用领域(例如消费电子、工业控制、医疗设…

steam搬砖全套操作流程之如何卖货(第③课)

上一篇文章阿阳分享了Steam项目如何选品,今天就给大家说说装备如何发货等重要事项。 本节课主要为大家讲解:定价规则,加价原则,认识装备磨损度和印花,自动发货软件和自动上架软件的讲解。 (Steam装备选品…

ESXi 7.0 U3m Inspur (浪潮) 定制版 OEM Custom Installer CD

VMware ESXi 7.0 Update 3m - 领先的裸机 Hypervisor (All OEM Customized Installer CDs) ESXi 7.0 U3m Standard (标准版) ESXi 7.0 U3m Dell (戴尔) 定制版 OEM Custom Installer CD ESXi 7.0 U3m HPE (慧与) 定制版 OEM Custom Installer CD ESXi 7.0 U3m Lenovo (联想) 定…

在linux系统上运行Stable Diffusion web UI

stable-diffusion-webui项目地址 该项目是一个针对Stable Diffusion模型的浏览器操作界面,基于Gradio。 环境: 在恒源云上租的服务器,操作系统:Ubuntu、显卡:A4000-16G。恒源云官网链接 项目的Readme.md让我们用web…

科二学习笔记

文章目录 一、侧方位停车进库:出库: 二、倒车入库右入库与右出库出库部分:入库部分第一种方法(网络版本):入库部分第二种方法: 左入库与左出库左出库左入库 三、直角转弯(右直角) 练车时间 am 7 ~ 11 pm15 ~ 18 一、侧…

中国做SaaS为什么这么难?这里解释了深层次的原因!

01 SaaS是什么? SaaS就是共享单车 SaaS,翻译过来是“软件即服务”。在大家的认知中,软件属于“产品”,SaaS也确实是一种产品,那为什么几乎所有的SaaS厂商却都在强调“服务”这个概念呢? 产品VS服务&…

JavaWeb笔记(三)

Java与数据库 通过Java如何去使用数据库来帮助我们存储数据呢,这将是本章节讨论的重点。 初识JDBC JDBC是什么?JDBC英文名为:Java Data Base Connectivity(Java数据库连接),官方解释它是Java编程语言和广泛的数据库之间独立于数…

Pod 生命周期

目录 1,概述 Pod Phase阶段 2,创建和终止 pod的创建过程 pod的终止过程 3 Init容器 容器探针 容器回调 1,概述 我们一般将pod对象从创建至终止的这段时间范围内称为pod生命周期,它主要包含下面过程: 1.pod创建过…

信捷PLC使用串口485与超声波传感器通讯实例

使用信捷的XL3-32PLC,XL3支持串口通讯。用来与国产超声波检测传感器进行通讯。 首先是硬件接线: 将传感器的485口A、B与PLC的485口A、B分别连接好。 接线完成后,可以在电脑端先使用串口调试助手测试一下,数据的发送与接受是否正常。 另外,PLC的串口数据发送与接收,…

selenium基础定位元素入门

参考文章链接 什么是selenium? selenium是一个web自动化测试工具selenium环境部署安装 首先需要安装python环境 1、安装在cmd 直接输入 :pip install selenium2、卸载:在cmd输入:pip uninstall selenium3、查看:pip…

直播产品行业解决方案|商业化变现模型

摘要 在过去几年的直播行业创业风口期中,直播的用户关注度疯狂增长,但用户质量却参差不齐。随着用户新鲜感一过,流失率变得相当严重,各大平台都在竭尽全力防御。然而,留住“凑热闹”的非直播受众用户并不是最关键的问…

python高级-线程和进程相关

这里前面的linux基础就不补充了,只写一些比较高级的 目录 一、文件查找 1.按照名字查找 2.通配符 3.文件大小查找 二、压缩和打包 1.zip 2.gzip 3.tar命令 三、权限管理 四、多进程 1.创建进程 2.获取进程id 3.进程传参 4.进程不共享全局变量 5.守护…

系统重构实施,百亿级核心交易如何保证准确性?

重构:又喜欢又害怕 一个企业级的应用,即使是诸葛亮级别的设计人员,最初的考虑都不可能尽善尽美,会存在设计不够或者设计过头的情况。加上业务的发展可能与当初的推想不一致,这样就使得上线初期稳稳当当的一个系统&…

【MySQL】数据库中这么多数据类型你真的了解吗?一文看懂不同数据类型有何区别

【MySQL】数据类型 一、常见数据类型二、数值类型2.1 整型2.1.1 小结 2.2 bit类型2.3 float 类型2.4 decimal类型---精度更高 三、字符串类型3.1 char---固定字符串3.2 varchar---变长字符串3.2.1 char和varchar区别 3.3 日期和时间类型3.4 enum和set3.4.1 set查询----find_in_…

入门编程其实也简单

随着信息技术的快速发展,编程已经成为一个越来越重要的技能。那么,我们该如何入门编程呢? 编程是指使用计算机语言编写计算机程序的过程。计算机程序是一系列指令的集合,这些指令告诉计算机要执行的操作。编程的目的是创建计算机…

2023-6-13-第四式建造者模式

🍿*★,*:.☆( ̄▽ ̄)/$:*.★* 🍿 💥💥💥欢迎来到🤞汤姆🤞的csdn博文💥💥💥 💟💟喜欢的朋友可以关注一下&#xf…

Openharmony使用hdc提效

告别串口卡顿调试🐸hdc增效大法🐸,工作环境主要是Linux,所以主要是介绍Linux环境下使用喔~ 文章目录 HDC1.1 简单介绍1.2 搭建环境1.2.1 设备机1.2.2 pc机1.2.3 操作 AuthorDateVersionDescription陈梓归2023-06-13V1.0第一个版本…

详解模板模式

目录 1.概述 2.实际业务场景示例 2.1.需求和实现思路 2.1.完整代码实现 1.概述 模板模式是一种常用的设计模式,它定义了一个操作中的算法的骨架,将某些步骤延迟到子类中实现。模板模式使得子类可以在不改变算法结构的情况下重新定义算法中的某些步骤…