二叉树

二叉树基础

1.斜树

所有节点都只有左子树(左斜树),或者所有节点只有右子树(右斜树),称为斜树如图

QQ截图20150818161122QQ截图20150818161132

2、满二叉树

所有分支节点都存在左子树和右子树,并且所有的叶子结点都在同一层上。

QQ截图20150818161354

根据满二叉树的定义,得到其特点为:

  1. 叶子只能出现在最下一层。
  2. 非叶子结点度一定是2.
  3. 在同样深度的二叉树中,满二叉树的结点个数最多,叶子树最多。

3、完全二叉树

若设二叉树的深度为h,除第 h 层外,其它各层 (1~h-1) 的结点数都达到最大个数,第 h 层所有的结点都连续集中在最左边,这就是完全二叉树。

(1)所有的叶结点都出现在第k层或k-l层(层次最大的两层)

(2)对任一结点,如果其右子树的最大层次为L,则其左子树的最大层次为L或L+l。

 

QQ截图20150818162402

完全二叉树的性质

1)只允许最后一层有空缺结点且空缺在右边,即叶子结点只能在层次最大的两层上出现;

2)对任一结点,如果其右子树的深度为j,则其左子树的深度必为j或j+1。 即度为1的点只有1个或0个(自己想下为什么)

可以根据公式进行推导,假设n0是度为0的结点总数(即叶子结点数),n1是度为1的结点总数,n2是度为2的结点总数,则 :

第一你要知道什么是树的 度,度就是这个节点有几个孩子,例如上图结点1 2 3 4  的度为2,结点5 的度为1,节点6 7 8 9 10 的度为0;

然后我们就可以进一步了解他的性质

这个完全二叉树的共有n个节点(同样适用于满二叉树)

性质(1):n = n0+n1+n2     这个完全二叉树共有n个结点,是度为0,度为1,度为2的结点个数的总和(很显而易见,小学生都会)

性质(2):n个结点构成的二叉树共有n-1个边,n - 1 = n1+n2   这个节点度为1不就是他连了一个孩子有一条边么?度为2不就是他连2个孩子2条边么?这很简单

性质(3):把上面两个是式子化简一下  n = n0+n1+n2    n-1 = n1+n2  两式一减 秘密就出现了   n0=n2+1

性质(4): 由性质(3)带入式子  n=n0+n1+n2  得到  n= 1+n1+2*n2 或者 n= 2*n0+n1-1,由于完全二叉树中度为1的结点数只有两种可能0或1(不信自己画一画),由此得到n0=n/2 或 n0=(n+1)/2

利用性质(3)和性质(4) :当n为奇数时(n1=0)向上取整,n=2*n0 - 1;n为偶数时(n1=1)n=2*n0。可根据完全二叉树的结点总数计算出叶子结点数,和度为二的结点的个数。

二、二叉树性质

1、一般二叉树性质

1、在非空二叉树的i层上,至多有2i-1个节点(i>=1)。通过归纳法论证。

2、在深度为K的二叉树上最多有2k-1个结点(k>=1)。通过归纳法论证。

3、对于任何一棵非空的二叉树,如果叶节点个数为n0,度数为2的节点个数为n2,则有: n0 = n2 + 1

在一棵二叉树中,除了叶子结点(度为0)之外,就剩下度为2(n2)和1(n1)的结点了。则树的结点总数为T = n0+n1+n2;在二叉树中结点总数为T,而连线数为T-1.所以有:n0+n1+n2-1 = 2*n2 +n1;最后得到n0 = n2+1;

QQ截图20150818171417

上图中结点总数是10,n2为4,n1为1,n0为5

2、完全二叉树性质

a、具有n的结点的完全二叉树的深度为(log2n)向下取整+1.

满二叉树是完全二叉树,对于深度为k的满二叉树中结点数量是2k-1 = n,完全二叉树结点数量肯定最多2k-1,同时完全二叉树倒数第二层肯定是满的(倒数第一层有结点,那么倒是第二层序号和满二叉树相同),所以完全二叉树的结点数最少大于少一层的满二叉树,为2k-1-1。

根据上面推断得出: 2k-1-1< n=<2k-1,因为结点数Nn为整数那么n<=2k-1可以推出n<=2k ,n>2k-1-1可以推出 n>=2k-1,所以2k-1<n<=2k  。即可得k-1<=log2n<k 而k作为整数因此k=[log2n]+1。([log2n]向下取整)

b、如果有一颗有n个节点的完全二叉树的节点按层次序编号,对任一层的节点i(1<=i<=n)有

    1.如果i=1,则节点是二叉树的根,无双亲,如果i>1,则其双亲节点为[i/2],向下取整

    2.如果2i>n那么节点i没有左孩子,否则其左孩子为2i

    3.如果2i+1>n那么节点没有右孩子,否则右孩子为2i+1

QQ截图20150818173731

在上图中验证

第一条:

当i=1时,为根节点。当i>1时,比如结点为7,他的双亲就是7/2= 3;结点9双亲为4.

第二条:

结点6,6*2 = 12>10,所以结点6无左孩子,是叶子结点。结点5,5*2 = 10,左孩子是10,结点4,为8.

第三条:

结点5,2*5+1>10,没有右孩子,结点4,则有右孩子。

 

转载出处:https://www.cnblogs.com/polly333/p/4740355.html

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值