码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2015-05-05 21:55:33      阅读:226      评论:0      收藏:0      [点我收藏+]

标签:

二叉树的五条性质:

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;
}


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

标签:

原文地址:http://blog.csdn.net/a197p/article/details/45506941

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!