重新认识二叉树

一、二叉树的基本概念

把满足以下概念的树形结构叫做二叉树:
(1)每个结点的度都不大于2;
(2)每个 结点的孩子结点次序不能任意颠倒。

二、二叉树的性质

  1. 在二叉树的第i个结点上至多有2^(i-1) 个结点(i>=1);
  2. 深度为k的2叉树至多有2^k -1个结点;
  3. 对任意一颗二叉树T,若终端结点数为n0,而其度数为2的结点数为n2,则n0=n2+1;
  4. 具有n个结点的完全二叉树的深度为[log2(n)]+1;
  5. 对于具有n个结点的完全二叉树,如果按照从上到下和从左到右的顺序对二叉树中的所有结点从1开始顺序编号,则对于任意的序号为i的结点有:(1)如i=1,则序号为i的结点是根结点,无双亲结点,如i>1,则序号为i的结点的双亲结点序号为i/2;(2)如2*i>n,则序号为i的结点无左孩子,如2*i<=n,则序号为i的结点的左孩子结点序号为2*i;(3)如2*i+1>n,则序号为i的结点无右孩子,如2*i+1<=n,则序号为i的结点的右孩子结点序号为2*i+1;
上图中左为满二叉树、右为完全二叉树。
满二叉树是完全二叉树、完全二叉树不一定是满二叉树。

三、二叉树的存储结构

二叉树的结构是非线性的,每个结点最多有两个后继;
二叉树的存储结构有两种:顺序存储结构和链式存储结构
顺序存储:
重新认识二叉树_第1张图片
A B C D E F

重新认识二叉树_第2张图片
A   B     C

这种存储方式对于一棵完全二叉树是非常方便的,对于非完全二叉树,则是非常浪费空间的。

链式存储:
结点定义:
typedef struct Node{
     DataType data;
     struct Node * LChild;
     struct Node * RChild;
}


存储结构如上图所示。若一个二叉树含有n个结点,则它的二叉树链表中必含有2n个指针域,其中必有n+1个空的链域。

你可能感兴趣的:(二叉树的概念及存储结构)