C语言简单实现二叉树的顺序结构

C语言简单实现二叉树的顺序结构

用C语言编程将1, 2, 3, …, 12按照完全二叉树的编号顺序存入一个二叉树的顺序存储结构中。

以下是代码

代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

typedef int TElemType;

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

bool CreateSqBiTree(SqBiTree sqtree, TElemType element[], int n);
void PrintSqTree(SqBiTree sqtree, int size);

int main(){
    SqBiTree sqtree;
    TElemType element[] = {1,2,3,4,5,6,7,8,9,10,11,12};

   CreateSqBiTree(sqtree, element, 12);
   PrintSqTree(sqtree, 12);

    return 0;
}

bool CreateSqBiTree(SqBiTree sqtree, TElemType element[], int n){
    if(element == NULL || n <= 0 || n > MAX_TREE_SIZE)  return false;

    sqtree[0] = element[0]; //根结点赋值

    int i = 1, lchild, rchild; //结点编号从1开始,而数组下标从0开始,所以结点编号减1(即i-1)才是对应的数组存储单元下标
    while(i <= n){
        lchild = 2*i;
        if(lchild <= n) sqtree[lchild-1] = element[lchild-1];

        rchild = 2 * i + 1;
        if(rchild <= n) sqtree[rchild-1] = element[rchild-1];

        i++;
    }

    return true;
}

void PrintSqTree(SqBiTree sqtree, int size){
    for(int i = 0; i < size; i++){
        printf("%d, ", sqtree[i]);
    }

}


以下是简单代码

代码:

#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>

#define MAX_TREE_SIZE 100
typedef int SqBiTree[MAX_TREE_SIZE];

int createSqbt(SqBiTree sqtre, int tree[], int n)
{
    int i = 1, left, right;
    if (tree == NULL || n <= 0 || n > MAX_TREE_SIZE)
        return 0;
    sqtre[0] = tree[0];
    while (i <= n)
    {
        left = 2 * i;
        if (left <= n)
            sqtre[left - 1] = tree[left - 1];
        right = 2 * i + 1;
        if (right <= n)
            sqtre[right - 1] = tree[right - 1];
        i++;
    }
    return 1;
}

void printSqbt(SqBiTree sqtre, int x)
{
    for (int i = 0; i < x; ++i)
    {
        printf("%d ", sqtre[i]);
    }
}

int main()
{
    SqBiTree sqtre;
    int tree[] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12};
    createSqbt(sqtre, tree, 12);
    printSqbt(sqtre, 12);
    return 0;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值