热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

数据结构–树

一、树(Tree)的基本概念      树是由结点或顶点和边组成的(可能是非线性的)且不存在着任何环的一种数据结构。没有结点的树称为空(null或empty)树。
一、树(Tree)的基本概念

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

数据结构--树
这是一颗树

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

树结构的名词解释如下:

数据结构--树
树结构

1、节点:树中的一个独立单元,包含一个数据元素及诺干个指向其他子树的分支。例如,A、B、C等都是节点。

2、节点的度:节点拥有的子树数称为节点的度,例如A的度是3,C的度为0,B的度为3.

3、树的度:树的度是树内各个节点度的最大值,例如,上图中的度为3.

4、叶子:度为0 度节点称为叶子或者终端节点,例如:E、F、K、L、M、H、I、J都是叶子节点。

5、非终端节点:度不为0的节点或者分支节点,除根节点以外的非终端节点也称为内部节点。

6、双亲和孩子:节点的子树的根称为该节点的孩子,相应的该节点称为孩子的双亲,例如:B的双亲是A,B的孩子有E、F、G

7 、兄弟:同一个双亲的孩子节点称为兄弟节点,例如:B、C、D互为兄弟。

8、树的层次:节点的层次从根开始定义起,根为第一层,根的孩子为第二层,树中任何一层次等于双亲节点的层次加1.

9、有序树和无序树: 如果将树的节点的各子树看成从左到右是有序的(即不能互换)则称为该树为有序树;否则是无序树,在有序树中最左边的子树的根称为第一个孩子,最右边的称为最后一个孩子。

10、节点的高度:节点到叶子节点的最长路径(边数)。

11、节点的深度:根节点到这个节点所经历的边的个数。

12、节点的层数: 节点的深度-1。

13、数的高度:根节点的高度。

二、二叉树基本概念:

定义:二叉树是n(n>=0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树组成。

数据结构--树
普通二叉树

由二叉树定义以及图示分析得出二叉树有以下特点:

1)每个结点最多有两颗子树,所以二叉树中不存在度大于2的结点。

2)左子树和右子树是有顺序的,次序不能任意颠倒。

3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。

二叉树的性质:

1)在二叉树的第i层上最多有2i-1个节点 。(i>=1)

2)二叉树中如果深度为k,那么最多有2k-1个节点。(k>=1)

3)n0=n2+1  n0表示度数为0的节点数,n2表示度数为2的节点数。

4)在完全二叉树中,具有n个节点的完全二叉树的深度为[log2n]+1,其中[log2n]是向下取整。

5)若对含 n 个结点的完全二叉树从上到下且从左至右进行 1 至 n 的编号,则对完全二叉树中任意一个编号为 i 的结点有如下特性:

  a. 若 i=1,则该结点是二叉树的根,无双亲, 否则,编号为 [i/2] 的结点为其双亲结点;b. 若 2i>n,则该结点无左孩子,  否则,编号为 2i 的结点为其左孩子结点;c. 若 2i+1>n,则该结点无右孩子结点,  否则,编号为2i+1 的结点为其右孩子结点。

二叉树类型:

1、斜树:所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树。

2、满二叉树:在一棵二叉树中。如果所有分支结点都存在左子树和右子树,并且所有叶子都在同一层上,这样的二叉树称为满二叉树。

3、完全二叉树:对一颗具有n个结点的二叉树按层编号,如果编号为i(1

二叉树的存储方式:

1顺序存储:(数组)

数据结构--树
满二叉树
数据结构--树
顺序存储

2链式存储:(链表)

数据结构--树
链式存储节点结构
数据结构--树
链式存储结构

二叉树的遍历方式:

二叉树的遍历是指从二叉树的根结点出发,按照某种次序依次访问二叉树中的所有结点,使得每个结点被访问一次,且仅被访问一次。

数据结构--树
遍历示意图

1.前序遍历:通俗的说就是从二叉树的根结点出发,当第一次到达结点时就输出结点数据,按照先向左在向右的方向访问。

输出结果为:ABDHIEJCFG

2.中序遍历:从二叉树的根结点出发,当第二次到达结点时就输出结点数据,按照先向左在向右的方向访问。

输出结果为:HDIBJEAFCG

3.后序遍历:从二叉树的根结点出发,当第三次到达结点时就输出结点数据,按照先向左在向右的方向访问。

输出结果为:HIDJEBFGCA

4层序遍历:按照树的层次自上而下的遍历二叉树。

输出结果为:ABCDEFGHIJ

算法的实现转下一篇。二叉树的遍历


推荐阅读
  • 本文深入探讨了二叉树路径和问题的算法优化方法。具体而言,给定一棵二叉树,需要找出所有从根节点到叶节点的路径,其中各节点值的总和等于指定的目标值。通过详细分析和优化,提出了一种高效的解决方案,并通过多个样例验证了其有效性和性能。 ... [详细]
  • 在机器学习领域,深入探讨了概率论与数理统计的基础知识,特别是这些理论在数据挖掘中的应用。文章重点分析了偏差(Bias)与方差(Variance)之间的平衡问题,强调了方差反映了不同训练模型之间的差异,例如在K折交叉验证中,不同模型之间的性能差异显著。此外,还讨论了如何通过优化模型选择和参数调整来有效控制这一平衡,以提高模型的泛化能力。 ... [详细]
  • 结城浩(1963年7月出生),日本资深程序员和技术作家,居住在东京武藏野市。他开发了著名的YukiWiki软件,并在杂志上发表了大量程序入门文章和技术翻译作品。结城浩著有30多本关于编程和数学的书籍,其中许多被翻译成英文和韩文。 ... [详细]
  • 深入探讨:Java 8 中 HashMap 链表为何选择红黑树而非 AVL 树
    深入探讨:Java 8 中 HashMap 链表为何选择红黑树而非 AVL 树 ... [详细]
  • 本文详细介绍了Java代码分层的基本概念和常见分层模式,特别是MVC模式。同时探讨了不同项目需求下的分层策略,帮助读者更好地理解和应用Java分层思想。 ... [详细]
  • Laravel 开发技巧:如何为集合中的每个元素添加递增编号
    本文将介绍如何在 Laravel 集合中为每个数组元素添加递增的编号,帮助开发者更好地管理和操作数据。 ... [详细]
  • 双指针法在链表问题中应用广泛,能够高效解决多种经典问题,如合并两个有序链表、合并多个有序链表、查找倒数第k个节点等。本文将详细介绍这些应用场景及其解决方案。 ... [详细]
  • Python 数据可视化实战指南
    本文详细介绍如何使用 Python 进行数据可视化,涵盖从环境搭建到具体实例的全过程。 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 2.2 组件间父子通信机制详解
    2.2 组件间父子通信机制详解 ... [详细]
  • 深入解析:Synchronized 关键字在 Java 中对 int 和 Integer 对象的作用与影响
    深入探讨了 `Synchronized` 关键字在 Java 中对 `int` 和 `Integer` 对象的影响。尽管初看此题似乎简单,但其实质在于理解对象的概念。根据《Java编程思想》第二章的观点,一切皆为对象。本文详细分析了 `Synchronized` 关键字在不同数据类型上的作用机制,特别是对基本数据类型 `int` 和包装类 `Integer` 的区别处理,帮助读者深入理解 Java 中的同步机制及其在多线程环境中的应用。 ... [详细]
  • 题目 E. DeadLee:思维导图与拓扑结构的深度解析问题描述:给定 n 种食物,每种食物的数量由 wi 表示。同时,有 m 位朋友,每位朋友喜欢两种特定的食物 x 和 y。目标是通过合理分配食物,使尽可能多的朋友感到满意。本文将通过思维导图和拓扑排序的方法,对这一问题进行深入分析和求解。 ... [详细]
  • 投融资周报 | Circle 达成 4 亿美元融资协议,唯一艺术平台 A 轮融资超千万美元 ... [详细]
  • 二叉树的直径是指树中任意两个叶节点之间最长路径上的节点数量。本文深入解析了计算二叉树直径的算法,并提出了一种优化方法,以提高计算效率和准确性。通过详细的案例分析和性能对比,展示了该优化算法在实际应用中的优势。 ... [详细]
  • 本文深入探讨了基于前序遍历和中序遍历结果重构二叉树的算法。假设输入的前序遍历和中序遍历序列中均无重复数字,通过具体示例如前序遍历序列 {1, 2, 4, 7, 3, 5, 6, 8} 和中序遍历序列,详细解析了如何逐步重建原始二叉树结构。文章不仅提供了理论分析,还结合实际代码实现,帮助读者全面理解该算法的核心原理和应用方法。 ... [详细]
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社区 版权所有