二叉树的性质
1.在二叉树的第i层上最多有2^(i-1)个结点(i>=1)。
2.深度为k的二叉树至多有2^k –1个结点(k>=1)。
特别:
一棵深度为k且有2k–1个结点的二叉树称为满二叉树。可以对满二叉树的结点进行连续编号,约定编号从根结点起,自上而下,从左到右,由此引出完全二叉树的定义,深度为k,有n个结点的二叉树当且仅当其每一个结点都与深度为k的满二叉树中编号从1到n的结点一一对应时,称为完全二叉树。
3.对任意一棵二叉树,如果其叶结点数为n0,度为2的结点数为n2,则一定满足:n0=n2+1。
4.具有n个结点的完全二叉树的深度为floor(log2n)+1
5.对于一棵n个结点的完全二叉树,对任一个结点(编号为i),有:
①如果i=1,则结点i为根,无父结点;如果i>1,则其父结点编号为i/2。
如果2*i>n,则结点i无左孩子(当然也无右孩子,为什么?即结点i为叶结点);否则左孩子编号为2*i。
②如果2*i+1>n,则结点i无右孩子;否则右孩子编号为2*i+1。
二叉树的存储结构
1.
①链式存储结构,即单链表结构或双链表结构(同树)。数据结构修改如下:
typedef struct node;
typedef node *tree;
struct node
{
char data;
tree lchild, rchild;
};
tree bt;
或:
typedef struct node;
typedef node *tree;
struct node
{
char data;
tree lchild, rchild,father;
};
tree bt;
顺序存储结构,即几个数组加一个指针变量。数据结构修改如下
const int n = 10;
char data[n];
char lchild[n];
char rchild[n];
int bt; //根结点指针