C语言_数据结构总结9:树的基础知识介绍

news2025/3/17 11:48:58

 1. 树的基本术语

    - 祖先:考虑结点K,从根A到结点K的唯一路径上的所有其它结点,称为结点K的祖先。
    - 子孙:结点B是结点K的祖先,结点K是B的子孙。结点B的子孙包括:E,F,K,L。
    - 双亲:路径上最接近结点K的结点称为结点K的双亲。根A是树中唯一没有双亲的结点。
    - 孩子:k为E的孩子。
    - 兄弟:有相同双亲的称为兄弟。如K和L。
    - 堂兄弟:双亲在同一层的结点称为堂兄弟。

结点的度:树中一个结点的孩子个数,称为该节点的度
    - 树的度:树中结点的最大度数为树的度


    - 分支结点/非终端结点:度大于0的结点
        在分支结点/非终端结点中,每个结点的分支数就是该结点的度 
    - 叶结点:度为0的结点


    - 结点的层次:从树根开始定义,根结点为第一层,它的孩子为第二层,如何以此类推
    - 树的深度/高度:树中结点的最大层数
    - 结点的高度:以该结点为根的`子树的高度`


    - 有序树:树中结点的各子树从左到右都是有次序的,不能互换
    - 无序树:有序树以外的树

   
    - 路径:树中两个结点之间的路径是由这两个结点之间所经过的结点序列构成的
    - 路径长度:路径上所经过的边的个数
      根到每个结点的路径长度的最大值应是树的高度减1 

    - 森林:是 m (m>=0) 棵互不相交的树的集合。
     只要把一棵树的根结点删去就成了森林,反之,只要给m棵独立的树加上一个结点,并把这m棵树作为该结点的子树,则森林变成了树。

2. 树的性质

    1. 树的结点数n等于所有结点的度数之和+1  
        类推:n = 树中所有的边数之和 + 1
    2. m叉树中第i层上至多有 m^(i-1) 个结点(i>=1)
    3. 高度为h的m叉树至多有 (m^h-1)/(m-1) 个结点
        当各层结点数达到最大时,树中至多有1+m+m^2+……+m^h-1=(m^h-1)/(m-1)个结点
    4. 度为m,结点为n的树,最小高度 h = logm(m(n-1)+1)。即让每层的结点数都达到最大时
    5. 度为m,结点为n的树,最小高度 h = n - m + 1。即除了最底层,前h-1层都只有一个结点

3. 二叉树

    - 与树相似,二叉树也以递归的形式定义,二叉树是n(n>=0)个结点的有限集合:
        1. 可以为空二叉树,即n=0
        2. 可以由一个根结点和两个互不相交的被称为根的左子树和右子树组成。左子树和右子树又分别是一棵二叉树
         
    - 注意,二叉树是一种特殊的树形结构,其特点是每个结点至多有两棵子树(即二叉树中不存在度大于2的结点),并且二叉树的子树有左右之分,其次序不能任意颠倒,若将次序颠倒了,则成为了另一棵不同的二叉树,另外即使树中结点只有一棵子树,也要区分它是左子树还是右子树。
        
    - 二叉树 不等于 度为2的有序树
        1. 度为2的有序树至少要有3个结点,但二叉树可以为空。
        2. 度为2的有序树的左右结点是相对而言的,若某个结点只有一个孩子,则无需区分左右次序,但二叉树在这种情况下就要进行区分。即二叉树的结点次序不是相对于另一个结点而言的,而是确定的。
     
    二叉树的性质
        1. 非空二叉树上的叶结点树等于度为2的结点数+1
        2. 非空二叉树的第i层最多有 2^(i-1) 个结点(i>=1)
        3. 高度为h的二叉树,最多有 2^h-1 个结点

4. 满二叉树

    - 一棵高度为h,且有 2^(h-1) 个结点的二叉树称为满二叉树,即二叉树的每层都含有最多的结点。
    - 特点
        1. 叶结点都集中在二叉树的最下面一层
        2. 除叶结点外,每个结点度数均为2
    - 按层序编号:约定编号从根结点开始(根结点编号为1)起,自上而下,自左向右。
         每个结点对应一个编号,对应编号为i的结点,若有双亲,则其双亲 |i/2| ,若有左孩子,则左孩子为2i,若有右孩子,右孩子编号为2i+1

5. 完全二叉树

    - 高度为h,有n个结点的二叉树,当且仅当其每个结点都与高度为h的满二叉树中的编号为1~n的结点一一对应时,称为完全二叉树
    - 特点
        1. 若i<=|n/2|,则结点i为分支结点,否则为叶结点
        树中除了分叉节点就是叶结点,这句话对吗?
        这句话不完全对。
        在树结构中,节点通常分为内部节点(也称为分支节点)和叶节点。分支节点是有子节点的节点,叶节点是没有子节点的节点。然而,还有一种特殊情况,即树中只有一个根节点,它既不是分支节点(因为没有父节点),也不是叶节点(因为在一般定义下,叶节点是根节点的后代,且没有子节点)。所以树中除了分叉节点和叶结点外,在特殊情况下还可能存在单独的根节点。因此,“树中除了分叉节点就是叶结点” 这句话是不对的。

        2. 叶结点只可能在层次最大的两层上出现。对于最大层次中的叶结点,都依次排列在该层的最左边的位置上。
        3. 若有度为1的结点,则最多只可能有1个,且该结点只有左孩子无右孩子
        4. 按层序编号后,一旦出现某结点的编号i为叶结点或只有左孩子,则编号大于i的结点均为叶结点
        5. 若n为奇数,则每个分支结点都有左右孩子;若为偶数,则除了编号最大的分支结点只有左孩子无右孩子,其余结点都有左右孩子
        6. 当i>1时,结点i的双亲结点的编号为|i/2|,如果有左右孩子,则左孩子编号为2i,右孩子编号为2i+1
        7. 结点i所在的层次(深度)为 |log2(i)| + 1
        8. 具有n个结点的完全二叉树的高度为log2(n+1) log2(n) + 1;

6. 二叉排序树

    - 左子树上所有结点的关键字均小于根结点的关键字;右子树上所有结点的关键字均大于根结点的关键字;左右子树又各是一棵二叉排序树

7.平衡二叉树

    - 树中任意一个结点的左子树和右子树的高度之差的绝对值不超过1

8.正则二叉树

    - 树中每个分支结点都有2个孩子,即树中只有度为0或2的结点

文章如有出错不足处,欢迎评论区指出,如果觉得文章不错,就给我点个赞吧,谢谢!

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

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

相关文章

Python学习第十八天

Django模型 定义&#xff1a;模型是 Django 中用于定义数据库结构的 Python 类。每个模型类对应数据库中的一张表&#xff0c;类的属性对应表的字段。 作用&#xff1a;通过模型&#xff0c;Django 可以将 Python 代码与数据库表结构关联起来&#xff0c;开发者无需直接编写 S…

蓝桥杯备考:图论之Prim算法

嗯。通过我们前面的学习&#xff0c;我们知道了&#xff0c;一个具有n个顶点的连通图&#xff0c;它的生成树包括n-1个边&#xff0c;如果边多一条就会变成图&#xff0c;少一条就不连通了 接下来我们来学一下把图变成生成树的一个算法 Prim算法&#xff0c;我们从任意一个结…

langchain框架

LangChain的架构分为多个层次&#xff0c;支持Python和JavaScript生态 基础层&#xff08;langchain-core&#xff09;&#xff1a;提供LLM抽象接口、表达式语言&#xff08;LCEL&#xff09;等核心机制&#xff0c;支持超过70种主流模型&#xff08;如GPT-4、Llama&#xff0…

RHCE(RHCSA复习:npm、dnf、源码安装实验)

七、软件管理 7.1 rpm 安装 7.1.1 挂载 [rootlocalhost ~]# ll /mnt total 0 drwxr-xr-x. 2 root root 6 Oct 27 21:32 hgfs[rootlocalhost ~]# mount /dev/sr0 /mnt #挂载 mount: /mnt: WARNING: source write-protected, mounted read-only. [rootlocalhost ~]# [rootlo…

Mybatis3 调用存储过程

1. 数据库MySQL&#xff0c;user表 CREATE TABLE user (USER_ID int NOT NULL AUTO_INCREMENT,USER_NAME varchar(100) NOT NULL COMMENT 用户姓名,AGE int NOT NULL COMMENT 年龄,CREATED_TIME datetime NOT NULL DEFAULT CURRENT_TIMESTAMP,CREATED_BY varchar(100) NOT NUL…

HiPixel开源AI驱动的图像超分辨率的原生macOS 应用程序,使用 SwiftUI 构建并利用 Upscayl 强大的 AI 模型

一、软件介绍 文末提供程序和源码下载 HiPixel是一个开源程序基于SwiftUI构建的macOS原生应用程序&#xff0c;用于AI驱动的图像超分辨率&#xff0c;并利用Upscayl的强大AI模型。 二、软件特征 具有 SwiftUI 界面的原生 macOS 应用程序使用 AI 模型进行高质量图像放大通过 G…

缓存和客户端数据存储体系(Ark Data Kit)--- 应用数据持久化(首选项持久化、K-V、关系型数据库)持续更新中...

Core File Kit做怎删改查操作不便&#xff0c;用Ark Data Kit。 功能介绍 ArkData &#xff08;方舟数据管理&#xff09;为开发者提供数据存储、数据管理和数据同步能力&#xff0c;比如联系人应用数据可以保存到数据库中&#xff0c;提供数据库的安全、可靠以及共享访问等管…

本地部署OpenManus及原理介绍

概述&#xff1a; 最近Minaus特别火&#xff0c;随后开源社区就有项目尝试复刻Minaus&#xff0c;项目名称为OpenManus&#xff0c;原理是用推理模型为决策者&#xff0c;将我们输入的问题进行分解后调用本地工具执行。 OpenManus安装&#xff1a; 本人在Ubuntu桌面版本上安装…

高效手机检测:视觉分析技术的优势

在当今社会&#xff0c;手机已成为人们日常生活和工作中不可或缺的工具。然而&#xff0c;在某些特定场合&#xff0c;如考场、工作场所等&#xff0c;手机的使用却可能带来负面影响。因此&#xff0c;如何有效监测和防止在这些场合偷用手机的行为&#xff0c;成为了一个亟待解…

Spring Boot配置类原理、Spring Boot核心机制理解,以及实现自动装置的底层原理

目的:从底层源码角度分析 Spring Boot 配置类以及自动装载的底层原理 文章目录 1. Spring Boot 配置类实现自动装载1.1 @Configuration注解1.2 @Configuration 注解完成 bean 注入流程图1.3 @ConfigurationProperties注解赋值2. Spring Boot的核心机制:自动装配2.1 @SpringBo…

01-Canvas-使用fabric初始

fabric官网&#xff1a; https://fabric5.fabricjs.com/demos/ 创建画布并绘制 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

树莓派 连接 PlutoSDR 教程

在树莓派5上安装PlutoSDR&#xff08;ADALM-Pluto&#xff09;的驱动程序&#xff0c;主要需要安装相关的库和工具&#xff0c;以便与PlutoSDR通信&#xff0c;比如libiio和libad9361&#xff0c;并确保系统能够识别设备。由于树莓派5运行的是基于Linux的系统&#xff08;通常是…

Git使用(二)--如何配置 GitHub 远程仓库及本地 Git 环境

在日常的开发过程中&#xff0c;使用版本控制工具 Git 是一个非常重要的技能&#xff0c;特别是对于管理和协作开发。通过 GitHub&#xff0c;我们可以轻松地进行代码版本管理和共享。这篇博客将带您一步步学习如何配置 Git 环境并将本地仓库与 GitHub 远程仓库连接起来。 一、…

在Pycharm配置conda虚拟环境的Python解释器

〇、前言 今天在配置python解释器时遇到了这样的问题 经过一下午自行摸索、上网搜寻后&#xff0c;终于找到的解决的方案&#xff0c;遂将该方法简要的记录下来&#xff0c;以备后用&#xff0c;并希望能帮助到有同样问题或需求的朋友:) 我所使用的软件的版本如下&#xff0c;假…

零基础keil:设置注释快捷键

1.打开快捷键设置&#xff1a; 在Keil中&#xff0c;选择菜单栏中的“Settings”&#xff0c;然后选择“Shortcuts”来打开快捷键设置界面。 2.选择注释命令&#xff1a; 在快捷键设置界面中&#xff0c;找到与注释相关的命令&#xff0c;如“Comment Selection”&#xff0…

Java中关于Optional的 orElse 操作,以及 orElse 与 orElseGet 的区别

文章目录 1. 大概说明2. 详细分析2.1 .orElse 操作2.2 .orElse 的作用&#xff1a;避免空指针异常2.3 为什么要用&#xff1f;2.4 orElseGet如何使用2.5 orElse和orElseGet的区别 1. 大概说明 这篇文章的目的是为了说明&#xff1a; orElse 如何使用orElseGet 如何使用两者的…

TCP/IP协议中三次握手(Three-way Handshake)与四次挥手(Four-way Wave)

TCP/IP协议中三次握手&#xff08;Three-way Handshake&#xff09;与四次挥手&#xff08;Four-way Wave&#xff09; 一、TCP三次握手&#xff08;Three-way Handshake&#xff09;二、TCP四次挥手&#xff08;Four-way Wave&#xff09;三、常见问题解答总结为什么三次握手不…

python学智能算法(八)|决策树

【1】引言 前序学习进程中&#xff0c;已经对KNN邻近算法有了探索&#xff0c;相关文章链接为&#xff1a; python学智能算法&#xff08;七&#xff09;|KNN邻近算法-CSDN博客 但KNN邻近算法有一个特点是&#xff1a;它在分类的时候&#xff0c;不能知晓每个类别内事物的具…

【QT:控件】

目录 控件状态&#xff1a;​编辑 geometry : window frame windowlcon: qrc机制 qrc的使用方式&#xff1a; window opacity cursor font: ToolTip focusPolicy: styleSheet: 按钮类控件&#xff1a; PushButton: 给按钮添加图标&#xff1a; 给按钮添加快捷键…

Python(最新版)集成开发环境PyCharm下载安装详细教程

Python 下载和安装 1.进入Python官网 Download Python | Python.org&#xff0c;点击Downloads&#xff0c;这里以Windows为例 2.选择下载Python 3.13.2 Windows 64位的版本。注意&#xff1a;不能在Windows 7 或更早的版本上使用。 3.打开文件&#xff0c;会自动出现安装界…