数据结构(树的结构与定义)

2023-11-04

树的定义:树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。一棵非空的树包括一个根结点,还(很可能)有多个附加结点,所有结点构成一个多级分层结构。

 

二叉树的定义:每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。

 

二叉树的性质:

1)若二叉树的层次从0开始,则在二叉树的第i层至多有2^i个结点(i>=0)。

2)高度为k的二叉树最多有2^(k+1) - 1个结点(k>=-1)。 (空树的高度为-1)

3)对任何一棵二叉树,如果其叶子结点(度为0)数为m, 度为2的结点数为n, 则m = n + 1。

 

完美二叉树:一个深度为k(>=-1)且有2^(k+1) - 1个结点的二叉树称为完美二叉树。(又叫满二叉树)

完全二叉树:完全二叉树从根结点到倒数第二层满足完美二叉树,最后一层可以不完全填充,其叶子结点都靠左对齐。

完满二叉树:所有非叶子结点的度都是2。

 

二叉查找树的性质: 

(1)若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;

(2) 若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;

(3) 任意节点的左、右子树也分别为二叉查找树;

(4) 没有键值相等的节点。

 

二叉查找树的删除:

(1)如果删除的是叶节点,可以直接删除;

​(2)如果被删除的元素有一个子节点,可以将子节点直接移到被删除元素的位置;

(3)如果有两个子节点,这时候就采用中序遍历,找到待删除的节点的后继节点,将其与待删除的节点互换,此时待删除节点的位置已经是叶子节点,可以直接删除。

 

后继节点:根据不同的遍历排序后,将待删除的节点与他后面一个节点进行互换。

前序遍历:a、访问根节点;b、前序遍历左子树;c、前序遍历右子树。

中序遍历:a、中序遍历左子树;b、访问根节点;c、中序遍历右子树。

后序遍历:a、后序遍历左子树;b、后序遍历右子树;c、访问根节点。

已知前序和中序或者后序和中序,可以唯一确定一颗二叉树。

 

平衡二叉树的定义:平衡二叉查找树,又被称为AVL树,在具备二叉查找树的性质下还具有以下性质:

它是一棵空树或它的左右两个子树的高度差的绝对值不超过1,并且左右两个子树都是一棵平衡二叉树。

 

左旋:新节点替换旧节点的位置,且新节点的左子树变为旧节点的右子树

X

       /     \

    a       Y

    /    \

  b       c

左旋伪代码:

LEFT-ROTATE(T, x)  

01  y ← right[x]            // 前提:这里假设x的右孩子为y。下面开始正式操作

02  right[x] ← left[y]      // 将 “y的左孩子” 设为 “x的右孩子”,即 将β设为x的右孩子

03  p[left[y]] ← x          // 将 “x” 设为 “y的左孩子的父亲”,即 将β的父亲设为x

04  p[y] ← p[x]             // 将 “x的父亲” 设为 “y的父亲”

05  if p[x] = nil[T]       

06  then root[T] ← y                 // 情况1:如果 “x的父亲” 是空节点,则将y设为根节点

07  else if x = left[p[x]]  

08            then left[p[x]] ← y    // 情况2:如果 x是它父节点的左孩子,则将y设为“x的父节点的左孩子”

09            else right[p[x]] ← y   // 情况3:(x是它父节点的右孩子) 将y设为“x的父节点的右孩子”

10  left[y] ← x             // 将 “x” 设为 “y的左孩子”

11  p[x]

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据结构(树的结构与定义) 的相关文章

随机推荐

  • 蓝牙mesh组网-JDY-24M初步探索

    操作步骤如下 这款JDY 24M蓝牙功能强大 我主要应用其中mesh组网这个功能 mesh组网简单来说 就是组网的这几个蓝牙是可以互相通信 一一通信是通过蓝牙地址来确定的 一 配置组网 需要用到两根USB转TTL的线 JDY 24M蓝牙2个
  • LaTex目录管理

    LaTex生成章节 图片 表格目录 章节目录 在latex中 每个章节都由特定的关键字命令定义 如 section subsection subsubsection 等 利用这些关键字 我们可以生成文章的章节结构 并根据这些章节的结构和标题
  • 抖音爆火李峋同款爱心代码,简单附带教程,还有烟花代码,手残党也能学会!!

    最近看到抖音爆火的一些HTML代码 有人找 极客G 更新 今天用了几个小时给大家整理出来了下面几个代码 最简单的就是第一个爱心代码 第二个烟花代码可自定义文本 具体看下面 代码是HTML语言 前面是使用教程 只需要代码的请划到下方进行下载
  • Linux基础——运维 (operation)

    1 什么是运维 1 1 技术人员之间 会对运维有个开玩笑的认知 运维就是修电脑的 装网线的其实不然 运维是一个非常广泛的定义 1 2 基础运维 申请域名 购买 租用服务器 上架 调整网络设备的设置 部署操作系统和运行环境 部署代码 设计和部
  • 数学建模——Matlab中rem与mod区别

    求余函数和求模函数有相同的地方但又不完全一致 主要的区别在于对负整数进行除法运算的操作不同 对于整数a b来说 求余运算或求模运算的方法都是先求整数商c a b 再求余数或模r a c b 求余运算在取c的值时 向0方向取整 fix函数 而
  • 985的分数,却毅然选择了普本

    这两天看到一个问题 如果分数只是擦边进985211院校 那是保住985211的学历还是选普通本科大学自己喜欢的专业读 今天来聊一下我的看法 首先针对这个问题说一下我的看法 能够进入985 就不要选择211 能够进入211就不要选择普通一本
  • VirtualBox安装出现严重错误

    H3C是我们学习很好用的软件 H3C虚拟平台的运行需要VirtualBox虚拟机之上 简单来说 要想使用H3C就必须要正确安装VirtualBox 如果有的小伙伴在卸载VirtualBox的时候 卸载方式不得当 导致VirtualBox残余
  • JNI调用native方法出现 java.lang.UnsatisfiedLinkError: XXXclass.XXXmethod()异常的解决办法

    JNI调用native方法出现 java lang UnsatisfiedLinkError XXXclass XXXmethod 异常的解决办法 参考文章 1 JNI调用native方法出现 java lang UnsatisfiedLi
  • Servlet——文件上传

    文件上传 文章目录 文件上传 1 Form表单形式实现 1 1 前端 1 2 后端 1 3 实现文件的上传然后保存到本地 2 Js Ajax实现 1 Form表单形式实现 1 1 前端 更改表单提交方式 form enctype multi
  • 功能测试在软件开发周期中的作用是什么?

    功能测试是软件开发周期中不可或缺的一个环节 其作用在于保证软件交付给用户之后满足用户需求和预期 在本文中 我们将详细解析软件开发周期中功能测试的作用 首先 功能测试是软件开发周期中质量保证的重要环节 在开发阶段 开发人员会编写代码 并使用不
  • 技术岗/算法岗面试如何准备?5000字长文、6个角度以2023秋招经历分享面试经验

    技术岗 算法岗面试流程是什么样的 技术面都干什么 Coding 机试如何准备 技术面考察哪些知识 如何准备 项目八股如何准备 简历要注意什么 怎么做 大家好 我是卷了又没卷 薛定谔的卷的大厂算法工程师 陈城南 本文会从以上6个问题 全方位
  • jdbc处理时间问题

    2019独角兽企业重金招聘Python工程师标准 gt gt gt 遇到的问题如下 数据库中对应的字段属性为TIMESTAMP 6 java中类属性对应的字段为java util Date 虽然数据库中保存的是 2014 05 12 10
  • 一文带你精通Burp(附下载)

    添加链接描述 一文带你精通Burp 附下载
  • spring @EventListener 事件与监听

    1 自定义Application Event public class MyEvent extends ApplicationEvent private static final long serialVersionUID 1L priva
  • 1206. 设计跳表

    1206 设计跳表 不使用任何库函数 设计一个 跳表 跳表 是在 O log n 时间内完成增加 删除 搜索操作的数据结构 跳表相比于树堆与红黑树 其功能与性能相当 并且跳表的代码长度相较下更短 其设计思想与链表相似 例如 一个跳表包含 3
  • Dataset - DeepFashion 服装数据集

    Dataset DeepFashion 服装数据集 Dataset DeepFashion Project DeepFashion 对于数据集有学习科研等需求的 请在 AIUAI Dataset DeepFashion 服装数据集 中联系
  • 【最清晰】ThreadLocal和局部变量和成员变量的区别

    ThreadLocal是进程级别的全局变量 最近有一个疑惑 为什么线程类的局部变量不能完全替代ThreadLocal 每一次new 线程都是创建了一个副本啊照理来说也是独立的 为什么还需要ThreadLocal 实际上确实是独立的 但是答案
  • postman token 请求头添加

    思路 1 登录成功后将 得到的token设置为集合变量 2 在需要携带Authorization的请求头上使用该集合变量 关键代码 const responseData pm response json if responseData co
  • JsoupDemo123_Jsoup_三种解析方法(parse)

    文章目录 Jsoup 工具类 1 Jsoup快速入门 解析XML文件 2 parse String html 解析字符串的 3 解析URL parse URL url int timeoutMillis Jsoup 工具类 可以解析HTML
  • 数据结构(树的结构与定义)

    树的定义 树是由结点或顶点和边组成的 可能是非线性的 且不存在着任何环的一种数据结构 没有结点的树称为空 null或empty 树 一棵非空的树包括一个根结点 还 很可能 有多个附加结点 所有结点构成一个多级分层结构 二叉树的定义 每个结点