二叉树的性质和储存结构

第一节  二叉树的性质

性质1:在二叉树的i层上最多有2的i-1次个结点(i>=1)。

            问题:第i层上最少有几个结点?1个

性质2:深度为k的二叉树至多有2的k次-1个结点(k>=1)。

           问题:深度为k的二叉树最少几个结点?k个

性质3:对于任何一颗二叉树T,如果其终端结点数为i,度为2的结点数为k,则i=k+1。

             证明:        总结点数        n=i+j+k,(j是度数为1的结点数)

            n-1个入度 /  j*1+k*2个出度      n-1=j*1+k*2

                      两式联立解的i=k+1

满二叉树              

深度为k且有2的k次-1个结点的二叉树,如图所示

满二叉树的两个特点:(1)每层都是满结点

                                    (2)叶子都在最后一层

完全二叉树

在满二叉树的前提下,从编号由大到小删除(不可跳越)若干个结点的二叉树是完全二叉树

完全二叉树的特点:(1)叶子只可能出现在最后两层

                                (2)对任意结点,如果其右子树的最大层次为i,则左子树的最大层次是i或i+1.

注意:满二叉树是特殊的完全二叉树。

性质4:具有n个结点的完全二叉树的深度为[log2n]+1

性质5:如果对一棵有n个结点的完全二叉树(其深度可由性质4求出)的结点按层序编号,则有:

           (1)i=1,此结点是二叉树的根,无双亲;i>1,则此结点的双亲是[i/2].

           (2)如果2i>n,此结点无左孩子;否则2i是它的左孩子

           (3)如果2i+1>n,此结点无右孩子;否则2i+1是它的右孩子

第二节  二叉树的存储结构

1.顺序存储结构

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

//二叉树顺序存储表示

#define MAXSIZE 100

typedef TElemType SqBiTree[MAXSIZE]

SqBiTree bt;

(1)完全二叉树的顺序存储

(2)一般二叉树的顺序存储

二叉树的顺序存储的缺点:可能会浪费空间

所以顺序存储适合满二叉树和完全二叉树的存储

2.二叉树的链式存储结构

//二叉树的二叉链表储存表示
typedef struct BiTNode{
    TElemType data;                    //结点数据域
    struct BiTNode *lchild,*rchild;    //左右孩子指针
}BiTNode,*BiTree;

 

 

//二叉树的三叉链表储存表示
typedef struct BiTNode{
    TElemType data;                    //结点数据域
    struct BiTNode *lchild,*rchild,*parent;    //左右孩子以及双亲指针
}BiTNode,*BiTree;
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

秃头少年周某人

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值