数据结构学习之-二叉树的定义和存储实现
2017-06-20 20:55
288 查看
最近在中国大学mooc上学习了数据结构课程,这周温习了二叉树相关的知识,现在将和二叉树相关的定义、抽象数据结构、性质以及C++实现基本的操作进行总结。
一、二叉树的抽象数据类型描述
任何一种抽象数据类型的描述分为数据对象集和操作集两部分。
1、数据对象集:一种特殊的树,即是有穷的节点集合,非空时,由根节点和左右二叉子树组成,每个节点的度最大为2。
2、操作集: (1)判别二叉树树是否为空;(2)二叉树的遍历; (3)创建一个空的二叉树
3、特别性质: (1)二叉树本质上是种特殊的树,树中每个节点最多有2个子节点,子树有左右顺序之分,一般的树子树没有顺序。(2)二叉树的四种遍历方法: 先序遍历--根、左、右;中序遍历--左、根、右;后序遍历--左、右、根;层次遍历--从上到小,从左到右,一层层进行遍历。
二、几种特殊结构的二叉树
1、斜二叉树:二叉树的子树都在一边,呈一个严重倾斜的状态。
2、完美(满)二叉树:树的每一层都是满节点的,即:第i层节点必是2^(i-1),根节点在第一层。
3、完全二叉树:只有最后一层的节点可以是非满的,最后一层的节点必须是从左往右放的,具体定义和示意图如下:
比如该图中,JK节点要是分别是D的右节点和E的左节点,该树就是完全二叉树。
三、二叉树的存储结构
1、顺序存储结构:适合存储完全二叉树和完美二叉树,按照从上到下,从左到右的顺序存储N个节点的值,用数组实现即可。
对于一般的二叉树也可以采取这种方式,把相应的没有子节点的节点补齐成完全二叉树既可,但是当二叉树很稀疏,比如是斜二叉
树的时候就会造成很大的空间浪费。
优势:操作简单,元素索引也很简单。劣势:仅适合保存完美和完全二叉树。
2、链式存储结构:用链表的形式存储二叉树,每个节点结构体都有一个指向左子节点和右子节点的节点结构体指针。
优势:任何形式的二叉树都方便存储;劣势:元素索引较难,涉及到指针和内存操作,不方便。
一、二叉树的抽象数据类型描述
任何一种抽象数据类型的描述分为数据对象集和操作集两部分。
1、数据对象集:一种特殊的树,即是有穷的节点集合,非空时,由根节点和左右二叉子树组成,每个节点的度最大为2。
2、操作集: (1)判别二叉树树是否为空;(2)二叉树的遍历; (3)创建一个空的二叉树
3、特别性质: (1)二叉树本质上是种特殊的树,树中每个节点最多有2个子节点,子树有左右顺序之分,一般的树子树没有顺序。(2)二叉树的四种遍历方法: 先序遍历--根、左、右;中序遍历--左、根、右;后序遍历--左、右、根;层次遍历--从上到小,从左到右,一层层进行遍历。
二、几种特殊结构的二叉树
1、斜二叉树:二叉树的子树都在一边,呈一个严重倾斜的状态。
2、完美(满)二叉树:树的每一层都是满节点的,即:第i层节点必是2^(i-1),根节点在第一层。
3、完全二叉树:只有最后一层的节点可以是非满的,最后一层的节点必须是从左往右放的,具体定义和示意图如下:
比如该图中,JK节点要是分别是D的右节点和E的左节点,该树就是完全二叉树。
三、二叉树的存储结构
1、顺序存储结构:适合存储完全二叉树和完美二叉树,按照从上到下,从左到右的顺序存储N个节点的值,用数组实现即可。
对于一般的二叉树也可以采取这种方式,把相应的没有子节点的节点补齐成完全二叉树既可,但是当二叉树很稀疏,比如是斜二叉
树的时候就会造成很大的空间浪费。
优势:操作简单,元素索引也很简单。劣势:仅适合保存完美和完全二叉树。
2、链式存储结构:用链表的形式存储二叉树,每个节点结构体都有一个指向左子节点和右子节点的节点结构体指针。
优势:任何形式的二叉树都方便存储;劣势:元素索引较难,涉及到指针和内存操作,不方便。
相关文章推荐
- 数据结构:二叉树的三叉链表存储--Java实现
- 【郝斌数据结构自学笔记】60-65_树的定义_树的专业术语解释_树的分类_二叉树连续存【重点】_二叉树的链式存储_普通树的存储
- 二叉树的概念,二叉树的数据存储结构,二叉树的性质,二叉树的遍历方法数据结构-树的学习(3)
- 数据结构学习笔记-线性表链式存储(C语言实现)
- 【C语言】【数据结构】菜鸟学习日志(四) 用二叉树实现非递归排序
- 数据结构学习笔记9——区分叶结点与分支结点的二叉树实现方案一
- 【Java数据结构学习笔记之一】线性表的存储结构及其代码实现
- 【算法和数据结构】二叉树的定义和封装(C++实现)
- 数据结构学习笔记-队列的链式存储(C语言实现)
- 数据结构--二叉树(定义与存储结构)
- 【数据结构】二叉树的原理及实现学习总结
- C++学习 【4.5】 利用函数实现指定的功能---局部变量、全局变量、变量的存储类别、声明和定义
- 数据结构:二叉树的定义与存储
- 【学习点滴-数据结构-二叉树】二叉查找树源码实现
- 数据结构:二叉树的链式存储实现
- 数据结构学习笔记——二叉树的存储结构
- 数据结构(13)二叉树的动态链表存储和遍历的实现
- 数据结构学习笔记-栈的顺序存储(C语言实现)
- 数据结构学习笔记-线性表顺序存储(C语言实现)
- 数据结构学习之队列的链式存储的C++实现