完全二叉树、完美二叉树、完满二叉树、计算完全二叉树的结点

完美二叉树、完全二叉树、完满二叉树

一、完美二叉树(Perfect Binary Tree)

对于完美二叉树,我们常用的是另一个名称:满二叉树

完美二叉树的定义:

完美二叉树是一种特殊的完全二叉树,每层都是满的,像一个稳定的三角形

在这里插入图片描述

二、完全二叉树**(Complete Binary Tree)**

完全二叉树的定义:

全二叉树从根结点到倒数第二层满足完美二叉树,最后一层可以不完全填充,其叶子结点都靠左对齐。

在这里插入图片描述

其实理解完全二叉树可以借助于**栈(stack)**的思想。

具体就是我们可以将一棵完美二叉树的所有节点按照编号1…15的顺序依次入栈。然后对栈每一次出栈,栈里保存的结点集构造一棵二叉树都是一棵完全二叉树

完美二叉树和完全二叉树:

下图是一棵完美二叉树:

现在将编号为15, 14, …, 9的叶子结点从右到左依次拿掉或者拿掉部分,则是一棵完全(Complete)二叉树
在这里插入图片描述

例如将上图中的编号为15, 14, 13, 12, 11叶子结点都拿掉(从右到左的顺序):

在这里插入图片描述

但是如果不是依次拿掉就不满足完全二叉树

例如将上图编号15,14,13,11叶子结点都拿掉(从右到左的顺序):

在这里插入图片描述

那可以把它变成完全二叉树吗?

要不就是在拿掉编号11的时候也拿掉编号12,要不就是让编号11座位编号5的右孩子,则变成一棵完全二叉树

三、完满二叉树**(Full Binary Tree)**

所有非叶子结点的度都是2。(只要你有孩子,你就必然是有两个孩子。)

四、如何计算完全二叉树的结点数?

222. 完全二叉树的节点个数

这题其实很简单,但是为了达到较高效的时间复杂度,我们可以用到上面介绍到的完满二叉树

  • 如果是求一棵普通二叉树的结点数,只需要这样遍历就能得到结果,时间复杂度为 O(N):
public int countNodes(TreeNode root)
  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值