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

1、二叉树(Binary Tree)

1.1 什么是二叉树(Binary Tree)

每个结点至多拥有两棵子树(即二叉树中不存在度大于2的结点),并且,二叉树的子树有左右之分,其次序不能任意颠倒。

1.2 二叉树的性质

  1. 若二叉树的层次从0开始,则在二叉树的第i层至多有2^i个结点(i>=0)。
  2. 高度为k的二叉树最多有2^(k+1) - 1个结点(k>=-1)。 (空树的高度为-1)
  3. 对任何一棵二叉树,如果其叶子结点(度为0)数为m, 度为2的结点数为n, 则m = n + 1。

2、完美二叉树

一个深度为k(>=-1)且有2^(k+1) - 1个结点的二叉树称为完美二叉树
换句话说:树是满的,还是二叉的
图是这样的:
这里写图片描述

3、完全二叉树(Complete)

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

下图就不是一棵完全(Complete)二叉树
这里写图片描述
如果将编号11(K)结点从编号6(E)的左儿子位置移动到编号5(E)的右儿子位置,则变成一棵完全(Complete)二叉树。

  • 其实,理解完全(Complete)二叉树可以借助于栈(stack)的思想。 例如,把第一个图中的完美(Perfect)二叉树的所有结点按照编号1, 2, 3, …, 15依次入栈(push)。 那么,对栈的每一次出栈(pop)操作后,栈里保存的结点集对应到图上去都是一棵完全(Complete)二叉树

4、完满二叉树

所有非叶子结点的度都是2
换句话说:只要你有孩子,你就必然是有两个孩子。


参考博客:
完美二叉树, 完全二叉树和完满二叉树


例:
一个具有767个节点的完全二叉树,其叶子节点的个数为____
A . 383
B . 384
C . 385
D . 386

n = n2+n1+no
n0 = n2 + 1

可得方程:n0= (768-n1) / 2,又因完全二叉数节点为1的数要不为1要不为0,故选B。

  • n:总节点数
  • n2:度为2的节点数
  • n1:度为1的节点书
  • n0:度为0节点数
展开阅读全文

没有更多推荐了,返回首页