数据结构之满二叉树

一、二叉树

二叉树:二叉树是n(n>=0)个结点的有限集合,它或为空(n=0), 或是由一个根及两棵互不相交的左子树和右子树组成,且树中左子树和右子树也均为二叉树;二叉树可以是空集合, 左子树 、右子树也可以为空
二叉树的特点:

  1. 二叉树可以是空的,称空二叉树;
  2. 每个结点最多只能有两个孩子;
  3. 子树有左、右之分且次序不能颠倒;

二叉树具有下列重要性质:

  1. 在二叉树的第i(i>=1)层上至多有2^(i-1)个 结点。 
  2. 深度为k(k>=1)的二叉树至多有(2^k)-1个 结点,最少有k个节点
  3. 对任何一棵二叉树,如果其终端结点数为n0(叶子节点n0个),度为2的结点数为n2;则n0=n2+1。 即:叶结点数n0=度为2的结点数+1

二叉查树的遍历方式:

  • 中序遍历:左->根->右        2、5、6、7、10、14、17、18、19
  • 先序遍历:根->左->右       10、6、5、2、7、 14、18、17、19
  • 后续遍历:左->右->根       2、5、7、6、17、19、18、14、10
  • 层次遍历:层次遍历类似图的广度优先遍历(BFS)  10、6、14、5、7、18、2、17、19

二、满二叉树

满二叉树:一个二叉树,如果每一个层的结点数都达到最大值,则这个二叉树就是满二叉树。也就是说,深度为k(k>=1)且有(2^k)-1个结点的二叉树就是满二叉树

满二叉树的性质:

  1. 一个层数为k的满二叉树总结点数为:2^k-1,因此满二叉树的结点个数一定是奇数;第i层上的结点数为:2^(i-1)
  2. 一个层数为k的满二叉树的叶子结点个数(也就是最后一层):2^(k-1)
  3. 满二叉树的结点要么是叶子结点,度为0,要么是度为2的结点,不存在度为1的结点

三、完全二叉树

完全二叉树:深度为K的二叉树中,K-1层结点数是满的2^(k-2),K层结点是左连续的(即结点编号是连续的);高度为h(h>=2)的完全二叉树至少有2^(h-2)个叶子结点。

完全二叉树的性质:

  • n个结点的完全二叉树的深度为:[log2n]+1([ ]表示向下取整) 
  • 如果对一棵有n个结点的完全二叉树的结点按层序编号, 则对任一结点i (1≤i≤n) 、
  • 如果i=1, 则结点i是二叉树的根, 无双亲;如果i>1, 则其双亲结点是[i/2] 
  • 如果2*i>n, 则结点i无左孩子, 否则其左孩子是结点2*i 
  • 如果2*i+1>n, 则结点i无右孩子, 否则其右孩子是结点2*i+1

满二叉树是完全二叉树的特殊形态, 即如果一棵二叉树是满二叉树, 则它必定是完全二叉树

四、二叉树的存储

1、顺序存储:利用数组

如图:完全二叉树的顺序存储我们只需需要至上而下,至左而右给各个节点编号,该编号就是元素在数组中的索引;

如图非完全二叉树:我们需要增加虚拟节点,如果一个高度为h并且节点个数也是h的右支树,却需要2^h-1个存储空间, 所以该存储方式比较浪费空间

2、链式存储:利用链表

如图:二叉链表表示法 ,二叉链表,只能由父节点推导子节点,不能逆向

 

如图:三叉链表表示法,三叉链表相较于二叉链表,多了一个指向双亲的指针域,增加了空间但是对于树的操作来说更加灵活。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值