数据结构_树
一、树的定义
(1)有且仅有一个根节点;
(2)当结点个数大于1时,其余节点可分为互不相交的子树。 递归定义
概念:
结点的度
:节点拥有的子树数;
叶子(终端)结点
:度为0的结点
树的度
:树内各结点度的最大值
孩子
:结点的子树的根,对应 双亲,兄弟,祖先,子孙,堂兄弟
深度
:树中结点的最大层次
有序树
:树中结点的各子树看成是从左到右是有次序的,不能互换。反之为无序树。
二、森林
互不相交的树的集合。
三、二叉树
树的度小于等于2的树
满二叉树:除叶子节点外,其他结点的度都为2的二叉树。2^K-1个结点,k为深度
完全二叉树:对于深度为K的,有N个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点
性质:
(1) 在二叉树中,第i层的结点总数不超过2^(i-1);
(2) 深度为h的二叉树最多有(2^h)-1个结点(h>=1),最少有h个结点;
(3) 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;
(4) 具有n个结点的完全二叉树的深度为int(log2n)+1
(5)有N个结点的完全二叉树各结点如果用顺序方式存储,则结点之间有如下关系:
若I为结点编号则 如果I<>1,则其父结点的编号为I/2;
如果2*I<=N,则其左儿子(即左子树的根结点)的编号为2*I;若2*I>N,则无左儿子;
如果2*I+1<=N,则其右儿子的结点编号为2*I+1;若2*I+1>N,则无右儿子。
(6)给定N个节点,能构成h(N)种不同的二叉树。
存储结构:
1、顺序存储结构
利用数组存储,结点在数组中的相对位置蕴含结点间的关系。如tree[i]的双亲为tree[n-1],n为(i+1)/2向下取整
左孩子tree[2i+1]和tree[2i+2]
适合完全二叉树,一般二叉树会造成空间的浪费。
2、链式存储结构
两种实现方式:
(1)左孩子指针域,数据域,右孩子指针域
(2)左孩子指针域,数据域,右孩子指针域,父节点指针域 便于找到结点双亲
二叉树的遍历:
先根序遍历、中根序遍历、后根序遍历
分享到:
相关推荐
知识共享-数据结构_树(雷惊风-超精细).
c语言数据结构_之_树
"数据结构——树结构.ppt"这份文件很显然是一个关于树结构的讲座或教程材料,它可能涵盖了树的基本概念、算法实现以及实际应用。 首先,我们要理解树的基本概念。树是一种非线性的数据结构,由若干个节点(或称为...
这里我们关注的是“BitTree_order_output_树_数据结构_”这一主题,它涉及到镜像对称树的判断问题。镜像对称树,顾名思义,是指一棵树经过水平翻转后与其原本的形态完全一致,这种特性在某些特定的算法中十分关键。 ...
8. 树:树是一种非线性的数据结构,由节点和边构成。节点可以包含数据和指向其他节点的引用。二叉树、平衡树(如AVL树和红黑树)以及搜索树(如B树)是常见的树形结构。 9. 图:图由顶点(节点)和边构成,表示对象...
"动态序列与动态树问题——浅谈几种常用数据结构" 本文主要讨论了动态序列问题和动态树问题的解决方法,通过介绍了几种常用的平衡二叉树型数据结构来解决这些问题。动态序列问题是指在一个序列上执行一系列在线操作...
在给定的标题“BitTree_mirror_树_数据结构_mirror遍历_MirrorMirror_”中,主要涉及了两个关键概念:二叉树(Binary Tree)和镜像遍历(Mirror Traversal)。接下来,我们将深入探讨这两个知识点。 二叉树是一种...
3. **数据结构**:涵盖数组、链表、栈、队列、集合、映射、树(如二叉树、AVL树、红黑树)和图等。这些数据结构提供了不同的数据组织方式,适用于不同的问题场景。 4. **递归与分治策略**:递归是算法设计中的重要...
在众多的数据结构中,树是一种非常重要的抽象概念,它模拟了自然界中的层级关系,广泛应用于文件系统、数据库索引、编译器设计等多个领域。本教程主要探讨的是DS树(DSTree),一种特定类型的树数据结构。 DS树(DS...
这本书全面覆盖了线性结构、树形结构、图结构、动态存储分配、排序和查找等多种数据结构,并详细解释了它们的算法实现。 1. **线性结构**:线性结构是最基础的数据结构,包括数组和链表。数组是一种固定大小的连续...
对于"基于C++数据结构源码"的描述,我们可以期待这个代码库包含各种数据结构的具体实现,例如用C++类封装的数组、链表、树等。通过阅读和分析这些源码,可以加深对数据结构的理解,学习到实际编程中如何设计和实现...
一、实验目的 (1)理解动态查找表的动态生成过程; (2)任意给出一组数(不...(1)定义二叉排序树的数据结构; (2)实现二叉排序树的插入算法与查找算法,并建立二叉排序树; (3)进行数据查找和建树过程的比较。
树是一种非线性数据结构,例如二叉树、平衡树等,它们在搜索、排序等方面有广泛应用。图用于表示对象之间的关系,哈希表则提供快速查找功能。 学习C语言数据结构的关键在于理解每种数据结构的特性,以及如何在C语言...
首先,数据结构是编程和软件开发的基础,它涉及到了数组、链表、栈、队列、树、图等不同的结构类型。数组是最基本的数据结构,允许快速访问指定位置的元素,但插入和删除操作效率较低。链表则通过指针链接元素,便于...
在这个“Js数据结构_js数据结构_js实现算法_asleephi9_源码”的压缩包中,包含了用JS实现的各种数据结构和算法,这对于学习和提升JavaScript编程技能非常有帮助。 首先,我们来看看数据结构部分。数据结构是组织和...
在"BST.rar_bst_二叉搜索树_数据结构动画_树 动画"中,提供的内容很可能是通过动画的形式展示了二叉搜索树的运作过程,帮助学习者更直观地理解其内部机制。以下是关于二叉搜索树的一些关键知识点: 1. 插入操作:在...
树作为一种非线性数据结构,被广泛应用于各种算法和系统设计中。本话题主要关注树的一种特殊操作——镜像遍历,也称为“Mirror Mirror”遍历,它涉及到对树的节点进行翻转,以实现树的左右子树的互换。我们将深入...
2. **树形数据结构**:二叉树、二叉搜索树、平衡树(AVL树、红黑树)、堆(最大堆和最小堆)。二叉树是每个节点最多有两个子节点的树,二叉搜索树保证左子树的元素小于根节点,右子树的元素大于根节点,便于快速查找...
9. **B-树定义**:B-树是一种自平衡的树数据结构,广泛应用于数据库和文件系统中。对于一棵m阶的B-树,每个结点可以包含至多m个关键字。除了根结点外,所有非叶结点至少包含m/2个关键字。 ### 排序算法 10. **快速...