您的位置:首页 > 理论基础 > 数据结构算法

数据结构学习之-二叉树的定义和存储实现

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、链式存储结构:用链表的形式存储二叉树,每个节点结构体都有一个指向左子节点和右子节点的节点结构体指针。

优势:任何形式的二叉树都方便存储;劣势:元素索引较难,涉及到指针和内存操作,不方便。

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐