热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

数据结构第四章树(一)线索二叉树

1.树的基本概念(1)树是由根节点和若干颗子树构成的。树是由一个集合以及在该集合上定义的一种关系构成的。集合中的元素称为树的节点,所定义的关系称为父子关系。父子关

1. 树的基本概念

(1) 树是由根节点和若干颗子树构成的。树是由一个集合以及在该集合上定义的一种关
系构成的。集合中的元素称为树的节点,所定义的关系称为父子关系。父子关系在树的
节点之间建立了一个层次结构。在这种层次结构中有一个节点具有特殊的地位,
这个节点称为该树的根节点,或称为树根。
(2) 空集合也是树,称为空树。空树中没有节点;
(3) 孩子节点或子节点:一个节点含有的子树的根节点称为该节点的子节点;
(4) 节点的度:一个节点含有的子节点的个数称为该节点的度;
(5) 叶节点或终端节点:度为0的节点称为叶节点;
(6) 非终端节点或分支节点:度不为0的节点;
(7) 双亲节点或父节点:若一个节点含有子节点,则这个节点称为其子节点的父节点;
(8) 兄弟节点:具有相同父节点的节点互称为兄弟节点;
(9) 树的度:一棵树中,最大的节点的度称为树的度;
(10) 节点的层次:从根开始定义起,根为第1层,根的子节点为第2层,以此类推;
(11) 树的高度或深度:树中节点的最大层次;
(12) 节点的祖先:从根到该节点所经分支上的所有节点;
(13) 子孙:以某节点为根的子树中任一节点都称为该节点的子孙;
(14) 森林:由棵互不相交的树的集合称为森林。

2. 二叉树

(1) 二叉树的定义及其主要特征a. 二叉树的基本形态:空二叉树、单节点二叉树、左子树、右子树b. 性质:[1] 在非空二叉树中,第i层上至多有2^(i-1) 个结点。[2] 深度为k的二叉树至多有2^k - 1个结点[3] 对任何一棵二叉树,若其叶子结点数为n0,度为2的结点数为n2,则n0 = n2 + 1。[4] n个结点的完全二叉树深度为:log2(n)向下取整 + 1[5] 二叉树的堆式存储: 节点p的左儿子:2x,右儿子:2x+1c. 两种特殊的二叉树[1] 满二叉树:一颗深度为k且有2^k-1个结点的二叉树[2] 如果深度为k,有n个结点的二叉树,当且仅当其每个结点都与深度为k的满二叉树中编号从1到n的结点一一对应,该二叉树称为完全二叉树
(2) 二叉树的顺序存储结构和链式存储结构
(3) 二叉树的遍历a. 前序遍历b. 中序遍历c. 后序遍历d. 根据前序 + 中序重建二叉树(AcWing 18)
(4) 线索二叉树的基本概念和构造对二叉树节点的指针域做如下规定:a. 若节点有左孩子,则Lchild指向左孩子,否则指向直接前驱;右孩子同理;b. 增加两个标志域,Ltag表示指向的是子节点还是前驱;Rtag同理c. 指向前驱和后继的指针叫做线索。按照某种次序遍历,加上线索的二叉树称之为线索二叉树

3. 树、森林

(1) 树的存储结构a. 只存父节点b. 邻接表存储所有子节点c. 左儿子右兄弟
(2) 森林F与二叉树T的转换a. 原树中叶子节点数 = 转换后的树中有右儿子的节点数 + 1b. F的前序遍历就是T的前序遍历c. F的后序遍历就是T的中序遍历
(3) 树和森林的遍历a. 前序遍历b. 后序遍历

4.线索二叉树

在这里插入图片描述
对二叉树节点的指针域做如下规定:
a. 若节点有左孩子,则Lchild指向左孩子,否则指向直接前驱;右孩子同理;
b. 增加两个标志域,Ltag表示指向的是子节点还是前驱;Rtag同理
c. 指向前驱和后继的指针叫做线索。按照某种次序遍历,加上线索的二叉树称之为线索二叉树

例如:按照中序遍历,节点g没有左孩子,就指向其直接前驱b,也没有右孩子,就指向其直接后继e(如上图)

按照前序遍历,节点g的前驱是e,后继是c

在这里插入图片描述

后序遍历画线索二叉树例题:

在这里插入图片描述

5.森林转二叉树

在这里插入图片描述
在这里插入图片描述


推荐阅读
  • 【行业专题报告】 人力资源专题资料
    每项专题报告都是从2019开始更新到至今,后续将持续更新如需查看完整报告和报告下载或了解更多,公众号:参一江湖今天为大家分享专题 ... [详细]
  • Codeforces Round #566 (Div. 2) A~F个人题解
    Dashboard-CodeforcesRound#566(Div.2)-CodeforcesA.FillingShapes题意:给你一个的表格,你 ... [详细]
  • Netflix利用Druid实现高效实时数据分析
    本文探讨了全球领先的在线娱乐公司Netflix如何通过采用Apache Druid,实现了高效的数据采集、处理和实时分析,从而显著提升了用户体验和业务决策的准确性。文章详细介绍了Netflix在系统架构、数据摄取、管理和查询方面的实践,并展示了Druid在大规模数据处理中的卓越性能。 ... [详细]
  • 本题探讨了在大数据结构背景下,如何通过整体二分和CDQ分治等高级算法优化处理复杂的时间序列问题。题目设定包括节点数量、查询次数和权重限制,并详细分析了解决方案中的关键步骤。 ... [详细]
  • 智能车间调度研究进展
    本文综述了基于强化学习的智能车间调度策略,探讨了车间调度问题在资源有限条件下的优化方法。通过数学规划、智能算法和强化学习等手段,解决了作业车间、流水车间和加工车间中的静态与动态调度挑战。重点讨论了不同场景下的求解方法及其应用前景。 ... [详细]
  • 2018-2019学年第六周《Java数据结构与算法》学习总结
    本文总结了2018-2019学年第六周在《Java数据结构与算法》课程中的学习内容,重点介绍了非线性数据结构——树的相关知识及其应用。 ... [详细]
  • 深入理解Java字符串池机制
    本文详细解析了Java中的字符串池(String Pool)机制,探讨其工作原理、实现方式及其对性能的影响。通过具体的代码示例和分析,帮助读者更好地理解和应用这一重要特性。 ... [详细]
  • 机器学习核心概念与技术
    本文系统梳理了机器学习的关键知识点,涵盖模型评估、正则化、线性模型、支持向量机、决策树及集成学习等内容,并深入探讨了各算法的原理和应用场景。 ... [详细]
  • 深入解析Java虚拟机(JVM)架构与原理
    本文旨在为读者提供对Java虚拟机(JVM)的全面理解,涵盖其主要组成部分、工作原理及其在不同平台上的实现。通过详细探讨JVM的结构和内部机制,帮助开发者更好地掌握Java编程的核心技术。 ... [详细]
  • 随着生活节奏的加快和压力的增加,越来越多的人感到不快乐。本文探讨了现代社会中导致人们幸福感下降的各种因素,并提供了一些改善建议。 ... [详细]
  • 由二叉树到贪心算法
    二叉树很重要树是数据结构中的重中之重,尤其以各类二叉树为学习的难点。单就面试而言,在 ... [详细]
  • JavaScript中的数组是数据集合的核心结构之一,内置了多种实用的方法。掌握这些方法不仅能提高开发效率,还能显著提升代码的质量和可读性。本文将详细介绍数组的创建方式及常见操作方法。 ... [详细]
  • vivo Y5s配备了联发科Helio P65八核处理器,这款处理器采用12纳米工艺制造,具备两颗高性能Cortex-A75核心和六颗高效能Cortex-A55核心。此外,它还集成了先进的图像处理单元和语音唤醒功能,为用户提供卓越的性能体验。 ... [详细]
  • 探讨ChatGPT在法律和版权方面的潜在风险及影响,分析其作为内容创造工具的合法性和合规性。 ... [详细]
  • 如何使用 CleanMyMac X 2023 激活码解锁完整功能
    本文详细介绍了如何使用 CleanMyMac X 2023 激活码解锁软件的全部功能,并提供了一些优化和清理 Mac 系统的专业建议。 ... [详细]
author-avatar
韩吉碳晶移动电热地毯
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有