数据结构学习笔记——二叉树的类型定义
2016-02-17 20:35
459 查看
二叉树
二叉树或为空树;或者是由一个根结点加上两棵分别称为左子树和右子树的、互不相交的二叉树组成。树和二叉树都是用递归定义的,递归定义的数据结构的基本操作一般也可以用递归算法实现。
二叉树有5种基本形态
空树只含根结点
右子树为空树
左子树为空树
左右子树均不为空树。
二叉树是有序的,即使树中结点只有一棵子树,也要区分它是左子树还是右子树。
两类特殊的二叉树:
满二叉树:深度为k且含有2k−12^k-1个结点的二叉树。
完全二叉树:树中所含的n个结点和满二叉树中编号为1~n的结点一一对应。
特征:深度为k的完全二叉树前k-1层是满的。
叶子结点可出现在第k层和k-1层。
第k层结点集中在左侧。
二叉树的重要特性
在二叉树的第i(i≥1i\geq1)层上至多有2i−12^{i-1}个根结点。深度为k(i≥1i\geq1)的二叉树上至多含2k−12^k-1个结点。
推广:满二叉树的第k层的结点个数比其第1~k-1层所有的结点总数多1个。
对任何一棵二叉树,若它含有n0n_0个叶子结点、n2n_2个 度为2的结点,则必存在关系式:n0=n2+1n_0=n_2+1
推广:已知一棵度为m的树中有N1个度为1的结点,N2个度为2的结点,……Nm个度为m的结点,问该树中有多少个叶子结点。
证明:设N为总结点数,N0为叶子结点数,则:N=N0+N1+N2+……Nm
N-1=N1*1+N2*2+……Nm*m=分支总数
则有:N0=1+N2+2N3+……+(m-1)*Nm
具有n个结点的完全二叉树的深度为⌊log2n⌋ \lfloor log_2n \rfloor+1或⌈log2(n+1)⌉\lceil log_2(n+1)\rceil
若对含n个结点的完全二叉树从上到下且从左至右进行1至n的编号,则对完全二叉树中任意一个编号为i的结点:
若i=1,则该结点是二叉树的根,无双亲,否则,编号为i/2的结点为其双亲结点;
若2i>n,则该结点无左孩子,否则,编号为2i的结点为其左孩子结点;
若2i+1>n,则该结点无右孩子结点,否则,编号为2i+1的结点为其右孩子结点。
以上五个性质在严书上均有证明。
相关文章推荐
- Nginx源码分析 - 基础数据结构篇 - 字符串结构 ngx_string.c
- 舞蹈链--求精密覆盖(数据结构)
- Dex文件结构及对应的数据结构
- 数据结构图文解析之:二分查找及与其相关的几个问题解析
- 数据结构实验图论一:基于邻接矩阵的广度优先搜索遍历
- 数据结构
- 通过一个实例学会时间复杂度的计算
- 数据结构:JavaScript实现各种排序
- ArrayList的一些方法
- 开放定址散列算法
- 数据结构图文解析之:直接插入排序及其优化(二分插入排序)解析及C++实现
- MySQL索引背后的数据结构及算法原理
- redis原理-数据结构
- java实现的Trie树数据结构
- 数据结构算法
- 加速R运行的简易方法-数据结构和*pply簇
- 使用JavaScript的数组实现数据结构中的队列与堆栈
- 数据结构(陈越) 作业题 第三周
- 数据结构(陈越) 作业题 第二周
- 数据结构(陈越) 作业题 第一周