(数据结构第六章)二叉树的顺序存储结构

二叉树的五条性质:

1.在二叉树的第i层上至多有2^(i-1)个节点(i>=1)


2.深度为k的二叉树至多有2^k-1个节点(k>=1)


3.对任何一个二叉树T,如果其终端节点数为n0,度为2的节点数为n2,则n0=n2+1.


证:总结点数n=n0+n1+n2
设分支总数B,n=B+1
B=n1+n2;两式加减即证出。
补充个定义:节点拥有的子树数称为节点的度。
树的度是树内各节点度的最大值。


4.具有n个节点的完全二叉树的深度为floor(log(2)n)+1


5.如果对一颗有n个节点的完全二叉树(其深度为floor(log(2)n)+1)的节点按层序号(从第一层到floor(log(2)n)+1层,每层从左到右),则对任意节点(1<=i<=n)


(1),如果i=1,则节点i是二叉树的根,无双亲,如果i>1,则其双亲PARENT(i)是floor(i/2);
(2)如果2*i>n,则节点i无左孩子(节点i为叶子节点),否则其左孩子LCHILD(i)是节点2*i;
(3)如果2*i+1>n,则节点i无右孩子,否则其右孩子RCHILD(i)是节点2*i+1.


#include<cmath>
#include<cstdio>
#include<iostream>
#include<algorithm>
using namespace std;
//二叉树的存储结构
///----------二叉树的顺序存储表示-------------------
#define MAX_TREE_SIZE 100   //二叉树的最大节点树
typedef int SqBiTree[MAX_TREE_SIZE]; //0号单元存储根节点
SqBiTree bt;

//
///---------------存储结构劲适用于完全二叉树---------------------
//
int main()
{
    int d;
    printf("输入完全二叉树深度d:");
    scanf("%d",&d);

    printf("按层的顺序输入完全二叉树\n");
    for(int i=0;i<  floor(pow(2,d)+0.5 )-1 ;i++)
        scanf("%d",bt+i);

    printf("按层的顺序遍历该完全二叉树为:\n");
    int j=0;
    for(int i=0;i<  floor(pow(2,d)+0.5 )-1 ;i++){
        if(i == floor(pow(2,j)+0.5 ) ) { puts(""); j++; }
        printf("%d\t",bt[i]);
    }

    return 0;
}


  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值