二叉树

二叉树的性质

性质1:在二叉树第k层上的节点数最多有2k-1(k≥1)

解释:最多的时候是满二叉树,它的第1层有21-1=1个结点;第2层有22-1=2个结点;第3层23-1=4个结点;第4层有24-1=8个结点;……

性质2:深度为m的二叉树的节点数最多有2m-1;

性质3对于任意一棵二叉树度为0的结点(即叶子结点)总是比度为2的结点多一个;如果其叶结点数为N0,而度数为2的结点总数为N2,则N0=N2+1

性质4:具有n个结点的完全二叉树的深度为[log2n]+1;

性质5:具有n个结点的二叉树,其深度至少为[log2n]+1,其中[log2n]+1表示取log2n的整数部分;

满二叉树

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

完全二叉树

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

二叉树的遍历:

 

 

1. 前根序遍历:先遍历根结点,然后遍历左子树,最后遍历右子树。

ABDHECFG

2.中根序遍历:先遍历左子树,然后遍历根结点,最后遍历右子树。

HDBEAFCG

3.后根序遍历:先遍历左子树,然后遍历右子树,最后遍历根节点。

HDEBFGCA

 

已知一棵二叉树的前根序序列和中根序序列,构造该二叉树的过程如下:
1. 根据前根序序列的第一个元素建立根结点;
2. 在中根序序列中找到该元素,确定根结点的左右子树的中根序序列;
3. 在前根序序列中确定左右子树的前根序序列;
4. 由左子树的前根序序列和中根序序列建立左子树;
5. 由右子树的前根序序列和中根序序列建立右子树。

已知一棵二叉树的后根序序列和中根序序列,构造该二叉树的过程如下:

1. 根据后根序序列的最后一个元素建立根结点;
2. 在中根序序列中找到该元素,确定根结点的左右子树的中根序序列;
3. 在后根序序列中确定左右子树的后根序序列;
4. 由左子树的后根序序列和中根序序列建立左子树;
5. 由右子树的后根序序列和中根序序列建立右子树。


下一页

线索二叉树概念

1.定义

     n个结点的二叉链表中含有n+1个空指针域。利用二叉链表中的空指针域,存放指向结点在某种遍历次序下的前趋和后继结点的指针(这种附加的指针称为"线索")。
    这种加上了线索的二叉链表称为线索链表,相应的二叉树称为线索二叉树(Threaded   BinaryTree)。根据线索性质的不同,线索二叉树可分为前序线索二叉树、中序线索二叉树和后序线索二叉树三种。
  注意:
     线索链表解决了二叉链表找左、右孩子困难的问题,出现了无法直接找到该结点在某种遍历序列中的前趋和后继结点的问题。

2.线索链表的结点结构
     线索链表中的结点结构为: 
             
  
其中:
     ltag和rtag是增加的两个标志域,用来区分结点的左、右指针域是指向其左、右孩子的指针,还是指向其前趋或后继的线索。

       

      

3.线索二叉树的表示
【例】下面(a)图所示的中序线索二叉树,其线索链表如下面(b)图所示。
        
  注意:
     图中的实线表示指针,虚线表示线索。
     结点C的左线索为空,表示C是中序序列的开始结点,无前趋;
     结点E的右线索为空,表示E是中序序列的终端结点,无后继。
      线索二叉树中,一个结点是叶结点的充要条件为:左、右标志均是1。


 一颗完全二叉树第六层有8个叶结点(根为第一层),则结点个数最多有()个。

答案:D
二叉树第k层最多有2的(k-1)次方个节点
第六层最多有32个节点
第五层最多有16个节点
第四层最多有8个节点
第三层最多有4个节点
第二层最多有2个节点 
第一层最多有1个节点

完全二叉树的叶节点只可能出现在后两层

如果完全二叉树有6层,则前5层是满二叉树,总节点数目为16+8+4+2+1+8=39

如果完全二叉树有7层,则前6层是满二叉树,
前六层总节点数目为32+16+8+4+2+1=63 
第六层有8个叶子节点,则有32-8=24个非叶子节点
第七层最多有24*2个叶子节点
总节点数目为63+24*2=111


设一课完全二叉树共有999个结点,则在该二叉树中的叶节点个数是?

根据二叉树第k层上的节点数最多有2k-1(k≥1)深度为m的二叉树的节点数最多有2m-1;

m=10共10层;

前9层是满二叉树,总的节点数是:511

则第10层的叶子节点数目是:999-511=488

第九层的非叶子节点数目是:488/2=244;

第九层的节点数目是:256

则第九层的叶子节点数目是:256-244=12

则总的叶子节点数目是:12+488=500

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值