数据结构之二叉树

一、二叉树的定义

二叉树是n(n≥0)个结点的有限集合,该集合或者为空集(称为空二叉树),或者由一个根结点和两棵互不相交的、分别称为根结点的左子树和右子树的二叉树组成。

                        

               

如上图所示,左图为二叉树。右图不是二叉树,因为其D结点有三个子树,不满足二叉树的定义,所以其不是二叉树。

二、二叉树的特点

1.二叉树的每个结点最多有两棵子树,所以二叉树中不存在度大于2的结点。没有子树或者有一棵子树都是可以的。上图中右图中的树的结点D为3,所以其不是二叉树。左图中的树的结点度数最大为2,叶结点度为0。

2.左子树和右子树是有顺序的,次序不能颠倒。

3.即使树中某结点只有一棵子树,也要区分是左子树和右子树。因为其左子树和右子树是不同的两棵树。

三、二叉树的不同形态

一般情况下,二叉树有五种基本形态:

1.空二叉树。即没有结点的树也叫二叉树。

2.只有一个根结点。一般情况下,只有一个结点的树我们通常认为其是根结点,而非叶结点。

3.根结点只有左子树,通常称其为左斜树。

4.根结点只有右子树,通常称其为右斜树。

5.根结点既有左子树又有右子树。常见的二叉树即是这样,左右子树都有。

*斜树:所有的结点都只有左子树的二叉树叫左斜树。所有结点都是只有右子树的二叉树叫右斜树。这两者统称为斜树。斜树有很明显的特点,就是每一层都只有一个结点,结点的个数与二叉树的深度相同。其实,这种斜树与线性表的结构是一样的,因此,线性表结构实际上可以理解为是树的一种极其特殊的表现形式。

*满二叉树与完全二叉树

       满二叉树:在一棵二叉树中,如果所有的分支结点都存在左子树和右子树,并且所有的叶子结点都在同一层上,即称这样的树为满二叉树。如下图所示,即是满二叉树

由图可得,满二叉树的特点有:

1.满二叉树的叶子结点只能出现在最下一层,出现在其他层就不可能达成平衡。

2.满二叉树的非叶子结点的度数为2,并且一定为2。

3.在同样深度的二叉树中,满二叉树的结点个数最多,叶子结点个数也最多。

       完全二叉树:对一棵具有n个结点的二叉树按层序编号,如果编号为i(1≤i≤n)的结点与同样深度的满二叉树中编号为i的结点在二叉树中位置完全相同,则这棵二叉树称为完全二叉树。如下图所示:

按层序编号,即对二叉树从上到下,从左到右依次编号。如果编号为i的点与同样深度的满二叉树中编号为i的结点在二叉树中的位置相同,则是完全二叉树,否则非完全二叉树。上图所示的二叉树为完全二叉树,下图所示的二叉树不是完全二叉树。

上图所示的二叉树为普通二叉树,非完全二叉树,因为其编号为10的结点与满二叉树中编号为10的结点的位置不一样。由此,我们可以概括得出完全二叉树的特点:

1.完全二叉树的叶子结点只能出现在最下面两层。

2.最下一层的叶子结点一定集中在最左且连续的位置。

3.倒数第二层,如果有叶子结点,则一定都在最右且连续的位置。

4.如果某结点的度为1,则该结点只有左孩子,不存在度为1且是右孩子的情况。

5.同样结点数的二叉树,完全二叉树的深度最小。

四、二叉树的性质

性质1:在二叉树的第i层上至多有2^{^{i-1}}个结点(i≥1)。

性质2:深度为k的二叉树至多有2^{k}-1个结点(k≥1)。

性质3:对任何一棵二叉树T,如果其终端结点数为n0,度为2的结点数为n2,则有n0=n2+1

       终端结点数其实就是叶子结点数,而一棵二叉树除了叶子结点,剩下的就是度为1或度为2的结点了,我们设n1为度是1的结点数。则树T的结点总数n=n0+n1+n2。如果换个角度思考的话,以树的分支线总数来列式子,即树的分支总数等于树的结点数减一。由于根结点只有出去的分支,却没有进来的分支,如果结点的度为2,则说明有两个出去的分支,而度为1的结点只有一个出去的分支。所以,树的分支总数=n-1=n1+2*n2,将此式与n=n0+n1+n2相结合再经过推导便可得n0=n2+1

性质4:具有n个结点的完全二叉树的深度为\left \lfloor \log_{2}n \right \rfloor+1\left \lfloor x \right \rfloor表示不大于x的最大整数)。

       由满二叉树的定义可知,深度为k的满二叉树的结点数n一定是2^{k}-1,这是最多的结点个数。那么对于n=2^{k}-1倒推可得到k=\log_{2}\left ( n+1 \right )。比如结点数为15 的满二叉树,其度为4。

性质5:如果对一棵有n个结点的完全二叉树(其深度为\left \lfloor \log_{2}n \right \rfloor+1)的结点按层序编号(从第1层到第\left \lfloor \log_{2}n \right \rfloor+1层,每层从左到右),对任一结点i(1≤i≤n)有:(1)如果i=1,则结点i是二叉树的根,无双亲;如果i>1,则其双亲是结点\left \lfloor i/2 \right \rfloor;(2)如果2i>n,则结点i无左孩子(结点i为叶子结点);否则其左孩子是结点2i;(3)如果2i+1>n,则结点i无右孩子;否则其右孩子是结点2i+1。

以本文开始的二叉树为例,此五个性质完全符合。

 

以上即是与二叉树相关的概念~

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值