二叉树
来源:互联网 发布:淘宝如何设置主营类目 编辑:程序博客网 时间:2024/06/10 16:15
1、二叉树的定义
---- 二叉树(Binary Tree)是n(n>=0)个结点的有限集合。当n=0时,该集合为空集(称为空二叉树),反之则为非空二叉树。
非空二叉树由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。
---- 二叉树具有树型结构所有的基本特点。二叉树常被用作二叉查找树和二叉堆或是二叉排序树。
2、二叉树的特点
-- 1)每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。注意不是只有两棵子树,而是最多有。
没有子树或者有一棵子树都是可以的。
-- 2)左子树和右子树是有顺序的,次序不能任意颠倒。
-- 3)即使树中某结点只有一棵子树,也要区分它是左子树还是右子树。
---- 树和二叉树有两个主要的区别是:-- 1)树中结点的最大度数没有限制,而二叉树结点的最大度数为2;
-- 2)树的结点无左、右之分,而二叉树的结点有左、右之分。由于左、右子树也是二叉树,所以也可以再分成左右子树,是递归的。
3、特殊二叉树
---- 斜二叉树
所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树。
斜树有很明显的特点,就是每一层都只有一个结点,结点的个数与二叉树的深度相同。下图(1)(2)都是斜二叉树。
---- 满二叉树
在一棵二叉树中,如果所有分支结点都存在左子树和右子树,并且所有叶子结点都在同一层上,这样的二叉树称为满二叉树。
单是每个分支结点都存在左右子树,不能算是满二叉树,还必须要所有的叶子都在同一层上,这就做到了整棵树的平衡。
因此,满二叉树的特点有:
(1)叶子只能出现在最下一层。出现在其他层就不可能达成平衡。
(2)非叶子结点的度一定是2,否则就是“缺胳膊少腿”了。不存在度为1的结点。
(3)在同样深度(深度为k)的二叉树中,满二叉树的结点个数2^k-1最多,叶子数2^(k-1)最多。
---- 完全二叉树
对一棵具有n个结点的二叉树按层序编号,如果编号为i(1<=i<=n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置
完全相同,则这棵二叉树称为完全二叉树。
---- 如果一棵具有n个结点的二叉树的结构与满二叉树的前n个结点的结构相同,这样的树称作完全二叉树。
---- 满二叉树一定是一棵完全二叉树,但完全二叉树不一定是满二叉树。
---- 完全二叉树的所有结点与同样深度的满二叉树,它们按层序编号相同的结点,是一一对应的。这里有个关键词是按层序编号。
---- 完全二叉树的特点:
-- 1)叶子结点只能出现在最下两层。
-- 2)最下层的叶子一定集中在左部连续位置。
-- 3)倒数第二层,若有叶子结点,一定都在右部连续位置。
-- 4)如果结点度为1,则该结点只有左孩子,即不存在只有右子树的情况。
-- 5)同样结点数的二叉树,完全二叉树的深度最小。
判断某二叉树是否是完全二叉树的办法:看着树的示意图,给每个结点按照满二叉树的结构逐层顺序编号,如果编号出现空档,就
说明不是完全二叉树,否则就是。
4、二叉树的性质
-- 1)在二叉树的第i层上至多有2^(i-1)个结点(i>=1).
第一层是根结点,有一个,2的0次方。第二层有两个,2的1次方,以此类推。
-- 2)深度为k的二叉树至多有2^k-1个结点(k>=1).
结点数最多=1+2+4+...+2^(k-1)是等比数列,根据等比数列求和公式。(有k项,等比q=2)
Sn=a1(1-q^n)/(1-q)=1×(1-2^k)/(-1)=2^k-1
-- 3)对任何一棵二叉树T,如果其终端结点(叶子结点)数为n0,度为2的结点数为n2,则n0=n2+1.
终端结点数其实就是叶子结点数,一棵二叉树,除了叶子结点外,剩下的就是度为1或2的结点数了,我们设n1为度是1的结点数。
则树T的结点总数n=n0+n1+n2. 而结点总数=分支线总数+1=n1+2n2+1.
n0+n1+n2=n1+2n2+1--->n0=n2+1
-- 4)具有n个结点的完全二叉树的深度为[log2n]+1 ([x]表示不大于x的最大整数)
---- 由满二叉树的定义可知:深度为k的满二叉树的结点数n=2^k-1,满二叉树的度数k=log2(n+1)
---- 对于完全二叉树:若按层序编号后其编号与同样深度的满二叉树中编号结点在二叉树中位置完全相同。
---- 完全二叉树的结点数一定小于等于满二叉树的结点数2^k-1,但一定多于2^(k-1)-1.所以2^(k-1)-1<n<=2^k-1
2^(k-1)<=n<2^k-->k-1<=log2n<k,而k作为度数也是整数,因此k=[log2n]+1.
-- 5)如果对一棵有n个结点的完全二叉树(其深度为[log2n]+1)的结点按层序编号(从第一层到第[log2n]+1层,每层从左到右),
除根结点外,若有一个结点的编号为i,则它的左孩子结点的编号为2i,右孩子结点的编号为2i+1.
---- 对任一结点i(1<=i<=n)有:
---- 若i=1,则结点i是二叉树的根,没有双亲结点;若i>1,则其双亲结点是[i/2].
---- 若2i>n,则结点i没有左孩子(结点i是叶子结点),否则其左孩子结点是2i。
---- 若2i+1>n,则结点i没有右孩子,否则其右孩子结点是2i+1.
- 二叉树、二叉堆
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- 二叉树
- C++ 贪吃蛇基本算法
- powerdesigner16.5将name字段附到comment中,并生成sql
- 面试问题解答记录(2016-08-18)
- Selenium3.0beta版本启动firefox浏览器的问题
- RestFul协议接口和SOAP协议接口
- 二叉树
- Android软键盘弹出时把布局控件顶上去的解决方法
- jquery select下拉框通过text找value
- SpringMVC 报org.springframework.beans.factory.NoSuchBeanDefinitionException
- TX1性能测试
- poj 3281 Dining (sap模板)
- java范型应用(应用了设计模式)
- Struts2 action的单例与多例
- 【51Nod】1264 - 线段相交(计算几何)