二叉树的性质和存储结构

一、二叉树的性质

  1. 在二叉树的第i层上至多有2的i-1次方个结点(i>=1),第i层上至少有1个结点在这里插入图片描述
  2. 深度为k的二叉树至多有2^k -1 个结点(k>=1),深度为k时至少有k个结点在这里插入图片描述
  3. 对任何一颗二叉树T,如果其叶子结点数为n0,度为2的结点数为n2,则n0=n2+1.

证明:设n1为度为1的结点数,则总结点数n = n0+n1+n2.
来看该二叉树的分支数:除了根结点外,其余结点都有一个分支进入,设B为分支总数,从下往上看,B = n-1,从上往下看,B=n1+2*n2. 合并后,n = n1+2 * n2+1,又n=n0+n1+n2,所以n0=n2+1.,此分析过程是关键,尽力掌握。
.在这里插入图片描述

了解性质4和性质5(都是完全二叉树的重要特征)之前,我们先来了解一下满二叉树完全二叉树,这两种二叉树它们在顺序存储方式下可以复原
满二叉树 一颗深度为k且有2^k - 1个结点得二叉树称为满二叉树。 特点是:每层结点数都是最大结点数(每层都满),叶子结点全在最底层
在这里插入图片描述
完全二叉树 深度为k,有n个结点的二叉树,当且仅当其每一个结点都与深度为k的满二叉树中编号从1~n的结点一一对应时,称之为完全二叉树.
其特点是:
a)叶子结点只可能在层次最大的两层出现.
b)对任意结点,如果其右子树的最大层次为i,则其左子树的最大层次必为i或i+1.
在这里插入图片描述

  1. 具有n个结点的完全二叉树的深度为在这里插入图片描述在这里插入图片描述反之表示不小于x的最小整数。在这里插入图片描述
  2. 如果对一棵有n个结点的完全二叉树的结点按层

序编号,则对任一结点i(i>=1&&i<=n),有:
在这里插入图片描述,该性质应用于顺序存储时便于找到i结点的双亲和后代

二、二叉树的存储结构

在这里插入图片描述

二叉树的顺序存储(数组)

实现:按满二叉树的结点层次编号,依次存放二叉树中的数据元素。
二叉树的顺序存储表示

#define MAXTSIZE 100		//二叉树最大结点数
typedef TElemType SqBiTree[MAXTSIZE]//0号单元存储根结点
SqBiTree bt;

但顺序存储只适用于完全二叉树或满二叉树,因为在深度为k只有k个结点的最坏情况下,却需要长度为2^k -
1的一维数组
,会造成存储空间的极大浪费,所以对于一般二叉树,更适合链式存储结构

二叉树的链式存储

二叉链表存储结构表示

在这里插入图片描述


typedef struct BiNode{
	TElemType data;
	struct BiNode *lchild,*rchild;//左右孩子指针
}BiNode,*BiTree;	//*BiTree是指向下一节点的一个指针,BiNode是普通结点类型;

在n个结点的二叉链表中,有n+1个空指针域
分析:n个结点肯定有2n个指针域(链域),除根结点外,每个结点有且仅有一个双亲,所以只会有n-1个结点的指针域存方指针,也就是说存放指针的指针域数目为n-1,共有2n个结点,所以空指针域数目=2n - (n-1)=n+1个

三叉链表存储结构表示(有三个指针域)

为了便于找到结点的双亲,增加一个只想双亲的指针域,称为三叉链表

在这里插入图片描述

typedef struct TriNode{
	TelemType data;
	struct TriTNode *lchild,*parent,*rchild;
}TriTNode,*TriTree;	
发布了34 篇原创文章 · 获赞 85 · 访问量 4613

猜你喜欢

转载自blog.csdn.net/weixin_45895026/article/details/104041021