二叉树、满二叉树和完全二叉树
2016-04-12 19:24
288 查看
二叉树是一种很重要的非线性数据结构,它是树结构的一种重要的类型(它不是树结构的特殊情况),其特征是每个节点最多有两个子树。
二叉树的特点:
二叉树每个结点最多有2个子结点,树则无此限制;
二叉树中结点的子树分成左子树和右子树,即使某结点只有一棵子树,也要指明该子树是左子树,还是右子树,就是说二叉树是有序的;
二叉树可以是空的(或者说二叉树可以为空集),而树却决不能是空的(或者说是空集)。
(二叉树的具体性质就没必要写)
满二叉树:
一棵非空高度为k(k>=0)的满二叉树,是有2^(k+1)–1个结点的二叉树。
满二叉树而言,除叶结点外,其它结点的度均为2.
满二叉树的特点:
叶结点都在第k层上;
每个分支结点都有两个子结点;
叶结点的个数等于非叶结点个数加1。
完全二叉树:
一棵有n
个结点、高为k的二叉树T,一棵高为k的满二叉树T*,用正整数按层次顺序分别编号T和T*的所有结点,如果T之所有结点恰好对应于T*的前n个结点,则称T为完全二叉树。层次顺序:按从上至下,即从第0至第k
层,每层由左到右的次序。
(标准的定义有点晦涩难懂啊!)
我自己的通俗点的理解是:
若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
完全二叉树是由满二叉树而引出来的。对于深度为K的,有N个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。
是若一棵二叉树至多只有最下面的两层上的结点的度数可以小于2,并且最下层上的结点都集中在该层最左边的若干位置上,则此二叉树成为完全二叉树。
完全二叉树的特点:
树中只有最下面两层结点的度可以小于2;
树中最下面一层的结点都集中在该层最左边的若干位置上(满二叉树意义上);
树中叶结点只能在层数最大的两层上出现,即存在一个非负整数k使得树中每个叶结点或在第k层或第k+
1层上;
对树中所有结点,按层次顺序,用自然数从1开始编号,仅仅编号最大的非叶结点可以没有右孩子,其余非叶结点都有两个孩子结点。
树中所有结点对应于高度为K的满二叉树编号由0-n的那些结点。
总结:满二叉树和 完全二叉树是二叉树的两种特殊情形。
二叉树的特点:
二叉树每个结点最多有2个子结点,树则无此限制;
二叉树中结点的子树分成左子树和右子树,即使某结点只有一棵子树,也要指明该子树是左子树,还是右子树,就是说二叉树是有序的;
二叉树可以是空的(或者说二叉树可以为空集),而树却决不能是空的(或者说是空集)。
(二叉树的具体性质就没必要写)
满二叉树:
一棵非空高度为k(k>=0)的满二叉树,是有2^(k+1)–1个结点的二叉树。
满二叉树而言,除叶结点外,其它结点的度均为2.
满二叉树的特点:
叶结点都在第k层上;
每个分支结点都有两个子结点;
叶结点的个数等于非叶结点个数加1。
完全二叉树:
一棵有n
个结点、高为k的二叉树T,一棵高为k的满二叉树T*,用正整数按层次顺序分别编号T和T*的所有结点,如果T之所有结点恰好对应于T*的前n个结点,则称T为完全二叉树。层次顺序:按从上至下,即从第0至第k
层,每层由左到右的次序。
(标准的定义有点晦涩难懂啊!)
我自己的通俗点的理解是:
若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。
完全二叉树是由满二叉树而引出来的。对于深度为K的,有N个结点的二叉树,当且仅当其每一个结点都与深度为K的满二叉树中编号从1至n的结点一一对应时称之为完全二叉树。
是若一棵二叉树至多只有最下面的两层上的结点的度数可以小于2,并且最下层上的结点都集中在该层最左边的若干位置上,则此二叉树成为完全二叉树。
完全二叉树的特点:
树中只有最下面两层结点的度可以小于2;
树中最下面一层的结点都集中在该层最左边的若干位置上(满二叉树意义上);
树中叶结点只能在层数最大的两层上出现,即存在一个非负整数k使得树中每个叶结点或在第k层或第k+
1层上;
对树中所有结点,按层次顺序,用自然数从1开始编号,仅仅编号最大的非叶结点可以没有右孩子,其余非叶结点都有两个孩子结点。
树中所有结点对应于高度为K的满二叉树编号由0-n的那些结点。
总结:满二叉树和 完全二叉树是二叉树的两种特殊情形。
相关文章推荐
- 扔鸡蛋问题
- VR全景项目外包团队— VR/AR相关领域介绍和VR全景案例
- linux 5种查找命令
- 又一道有意思的OJ:GPS数据处理
- chche缓存
- Swift接口和扩展
- [case分享]AD 2003升级2008导致XP mode登陆域时间长
- 剑指offer系列之35:两个链表的第一个公共节点
- Django ModelAdmin 中设置字段的默认值
- 初学者理解throw和throws
- 嵌入式 uboot引导kernel,kernel引导fs
- json用法示例
- 调试openstack源码的方法
- DOM启蒙——第三章
- 【bzoj4514】[Sdoi2016]数字配对 费用流
- 搜狐 扎金花
- 3117 高精度练习之乘法——http://codevs.cn/problem/3117/
- easyUI框架下实现日期按年,年月,年月日方式显示
- 第七周项目2友元类
- 静态数据成员的应用