树
1.树是一种非线性的数据结构,它是由n个有限结点组成有层次关系的集合.
2.树具有以下特点,可以根据这些特点来判断一个数据结构是否是树
•每个结点具有0个或多个子结点
•每个子结点只有一个父结点
•没有前驱的结为根结点
•除了根结点外,每个子结点又可以由m棵不相关的子树组成
树形结构是以分支关系定义的数据结构(非线性结构和线性结构,个人理解为有无分支的区别),相比队列,树的区别在于它的数据不是以一条线的形式组织
树分为自由树各有根树,自由树暂且不讨论(离散数学里面有提到,但是和现阶段编程没关系)有根树是由n个节点组成,当n=0时,为空树,不由为非空树 每个非空树有且只有一个根节点,每个根节点下有一或者多个树;
ps:注意,树的定义用到了递归的概念,根节点下有树,而这些树的根节点,恰恰就是它的下层节点
下面介绍 一些有关树的术语
1. 结点(node)包含数据项和指向其它节点 的分支
2. 结点的度(degree of node):结点所拥有的子树个数
3. 树的度(degree of tree):树中各结点度的最大值
4. 叶子结点(leaf node)即度为0的结点 又叫终端结点
5. 分支结点(branch node) 除叶结点以外的其它结点,又叫非终端结点
6. 结点的层次(level of node):从根结点到某结点所经路径上的分支数称为该结点的层次。根结点的层次为1,其余结点为其父结点的层次+1
7. 树的深度(depth):树中结点的最大层次数
二叉树
[img]
[/img]
和树一样,二叉树也是递归定义的,其结点有左右子树之分,逻辑上二叉树有五种基本形态:
(1)空二叉树——(a);
(2)只有一个根结点的二叉树——(b);
(3)只有左子树——(c);
(4)只有右子树——(d);
(5)完全二叉树——(e)
注意:尽管二叉树与树有许多相似之处,但二叉树不是树的特殊情形。
树和二叉树的2个主要差别:
1. 树中结点的最大度数没有限制,而二叉树结点的最大度数为2;
2. 树的结点无左、右之分,而二叉树的结点有左、右之分。 (我觉得这个才是本质区别)
二叉树的性质
(1) 在二叉树中,第i层的结点总数不超过2^(i-1);
(2) 深度为h的二叉树最多有2^h-1个结点(h>=1),最少有h个结点;
(3) 对于任意一棵二叉树,如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1;
引入两个 概念:
满二叉树(Full Binary Tree):
除最后一层无任何子节点外,每一层上的所有结点都有两个子结点(最后一层上的无子结点的结点为叶子结点)。也可以这样理解,除叶子结点外的所有结点均有两个子结点。节点数达到最大值。所有叶子结点必须在同一层上.
(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.顺序存储结构(数组)
二叉树的顺序存储,就是用一组连续的存储单元存放二叉树中的结点。因此,必须把二叉树的所有结点安排成为一个恰当的序列,结点在这个序列中的相互位置能反映出结点之间的逻辑关系,用编号的方法从树根起,自上层至下层,每层自左至右地给所有结点编号,缺点是有可能对存储空间造成极大的浪费,在最坏的情况下,一个深度为k且只有k个结点的右单支树需要2k-1个结点存储空间。依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中结点的序号可以唯一地反映出结点之间的逻辑关系,这样既能够最大可能地节省存储空间,又可以利用数组元素的下标值确定结点在二叉树中的位置,以及结点之间的关系
图(a)是一棵完全二叉树,图(b)给出的图(a)所示的完全二叉树的顺序存储结构。
对于一般的二叉树,如果仍按从上至下和从左到右的顺序将树中的结点顺序存储在一维数组中,则数组元素下标之间的关系不能够反映二叉树中结点之间的逻辑关系,只有增添一些并不存在的空结点,使之成为一棵完全二叉树的形式,然后再用一维数组顺序存储。如图1给出了一棵一般二叉树改造后的完全二叉树形态和其顺序存储状态示意图。显然,这种存储对于需增加许多空结点才能将一棵二叉树改造成为一棵完全二叉树的存储时,会造成空间的大量浪费,不宜用顺序存储结构。最坏的情况是右单支树,如图2所示,一棵深度为k的右单支树,只有k个结点,却需分配2k-1个存储单元。
图1:
图2
2.链式存储结构
二叉树的链式存储结构是指,用链表来表示一棵二叉树,即用链来指示元素的逻辑关系。
通常的方法是链表中每个结点由三个域组成,数据域和左右指针域,左右指针分别用来给出该结点左孩子和右孩子所在的链结点的存储地址。其结点结构为:
Lchild|data|Rchild
其中,data域存放某结点的数据信息;lchild与rchild分别存放指向左孩子和右孩子的指针,当左孩子或右孩子不存在时,相应指针域值为空(用符号∧或NULL表示)。利用这样的结点结构表示的二叉树的链式存储结构被称为二叉链表,这种结构只能从上至下查找
为了方便访问某结点的双亲,还可以给链表结点增加一个双亲字段parent,用来指向其双亲结点。每个结点由四个域组成,其结点结构为:
Lchild|data|Rchild|Parent
这种存储结构既便于查找孩子结点,又便于查找双亲结点;但是,相对于二叉链表存储结构而言,它增加了空间开销。利用这样的结点结构表示的二叉树的链式存储结构被称为三叉链表。
顺序存储(数组)和链表的优缺点:(可类比数组和链表)
数组:方便查找,节省存储空间(针对完全二叉树而言),查找方便,但是不方便改动
链表:改动方便,但是浪费存储空间,不方便查找遍历
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0083/6293/605545ce-e355-3265-9b1b-2d3521d51384-thumb.jpg)
- 大小: 4.4 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0083/6391/64a6688c-5754-3ed7-9d05-2fda8bb6a426-thumb.png)
- 大小: 16.5 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0083/6400/0aa91e2b-fc68-34b3-a7e2-4365390fdf23-thumb.png)
- 大小: 30.3 KB
![点击查看原始大小图片](http://dl2.iteye.com/upload/attachment/0083/6404/48844a1c-3d35-3f5b-8e09-80d3f5dd7a84-thumb.png)
- 大小: 20.3 KB
分享到:
相关推荐
树与二叉树算法总结 树与二叉树是计算机科学中非常重要的一部分,掌握树与二叉树的算法对于数据结构和算法设计非常重要。...树与二叉树是数据结构和算法设计中的重要部分,掌握这些知识点对于编程和算法设计非常重要。
涵盖的知识点包括树和二叉树的定义、性质、操作和应用等。 一、树和二叉树的定义 树是一种数据结构,由一个根节点和零个或多个子树组成。二叉树是一种特殊的树,其中每个节点最多有两个子节点。树和二叉树都是...
### 数据结构之树和二叉树实验报告知识点详解 #### 实验目的 1. **掌握二叉树的结构特征**: ...通过以上知识点的总结,我们可以更深入地理解二叉树的特性和操作,为进一步的学习和研究打下坚实的基础。
树和二叉树相关知识点总结 在计算机科学中,树是一种重要的数据结构,广泛应用于计算机科学和信息技术领域中。本资源将对树和二叉树的相关知识点进行总结和分析。 一、树的基本概念 树是一种非线性数据结构,由...
本资源是关于数据结构中的树和二叉树的知识点,该资源总结了树和二叉树的基本概念、定义、性质和应用。 一、树的基本概念 树是一种数据结构,它由一个根结点和零个或多个子树组成。树的每个结点都有一个值,称为键...
下面是树和二叉树习题及答案的知识点总结: 1. 树的定义:树是一种非线性数据结构,用于描述具有层次关系的数据集合。树可以被定义为一个有向图,其中每个结点都有一个父结点和零个或多个孩子结点。 2. 二叉树的...
根据给定的文档内容,我们可以总结出以下几个关键知识点: ### 选择题解析 #### 1. 度为2的结点数 - **题目描述**:一棵二叉树的顺序存储情况如下,需要求出度为2的结点数。 - **答案解析**:根据给定的顺序存储...
总之,树和二叉树的知识点包括但不限于路径长度、完全二叉树、哈夫曼树的构建和编码、二叉链表的结构以及二叉树的遍历。这些知识点在数据结构和算法的学习以及实际应用中都至关重要。通过理解和掌握这些概念,我们...
森林树和二叉树的转换知识点总结 一、树、森林和二叉树的转换 树、森林和二叉树是数据结构中的基本概念。树是一种非线性数据结构,森林是一组树的集合,二叉树是一种特殊的树结构。转换 trees 和 forests 到二叉树...
本文将深入探讨“树与二叉树”的相关知识点,包括树的基本概念、二叉树的定义、特性以及遍历方法。 首先,我们要理解“树”的基本概念。树是一种非线性的数据结构,它由若干个节点(或称为顶点)和连接这些节点的边...
知识点总结 树形结构是一种非常重要的数据结构,它广泛应用于计算机科学和信息技术领域。树形结构可以分为一般树和二叉树两种,二叉树是树形结构中的一种特殊类型。树的基本术语包括:根结点、叶子结点、父结点、子...
### 二叉树遍历实验报告知识点概览 #### 一、实验背景及目标 **实验背景:** 本次实验属于《数据结构》课程的一部分,旨在通过实际编程加深学生对二叉树这一数据结构的理解和应用能力。二叉树作为一种基本且重要的...
### 数据结构树和二叉树实验报告知识点梳理 #### 一、树的相关概念 1. **树(Tree)**:树是一种非线性的数据结构,它由有限个节点组成的一个层次关系集合。这些节点之间存在一种“一对多”的关系,即一个节点可以...
【知识点详解】 1. **树和二叉树的基本概念**: ...总结来说,本章节涵盖了树和二叉树的基本概念,包括它们的表示方式、性质、转换方法以及与算术表达式的关系,还涉及了树的度、节点数量、叶节点的计算等知识点。
- **定义**:二叉树是一种树形结构,每个节点最多有两个子节点,通常称为左子节点和右子节点。 - **分类**: - **完全二叉树**:除了最后一层外,每一层的节点都是满的,并且最后一层的节点都靠左排列。 - **满...
【知识点详解】 在计算机科学中,树是一种非线性数据结构,它由节点(或称为顶点)和边组成,每个节点可以有零个或多个子节点。在本实验报告中,讨论的是如何构建一种特殊形式的树,即孩子-兄弟链表(Child-Sibling...
### 树和二叉树知识点详解 #### 一、树的概念 树是一种非线性的数据结构,用于模拟具有层次关系的数据。它由一系列节点组成,这些节点之间通过边连接。 - **定义**: - 树`T`是一个包含`n`(`n`≥0)个数据元素的...
总结来说,本实验通过实际编程展示了树和二叉树的基本操作,包括构造、销毁、遍历等,这些都是数据结构课程中的关键知识点。通过这些操作,可以更好地理解和应用树状数据结构,为后续的算法设计和分析奠定基础。
本资源提供了详细的数据结构C语言版二叉树及其查找结构的知识点,包括树的定义、树的特点、二叉树的基本形态、 二叉树的性质、二叉树的存储结构和普通树转换成二叉树等方面的内容,对学习数据结构的新手有很大的帮助...
离散数学树知识点总结 在离散数学中,树是一种非常重要的数据结构,它广泛应用于计算机科学和信息技术领域。树的概念、性质和存储构造是离散数学的基础部分,本文将对树的知识点进行总结。 一、树的基本概念 树是...