c语言实现用数组构造二叉树,基于数组的完全二叉树 - C语言

这篇博客介绍如何使用C语言实现基于数组的完全二叉树,包括构造空二叉树、计算深度、层序遍历等操作,并提供了一个创建和遍历二叉树的示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

以下实现的是一个基于数组存储的完全二叉树

完全二叉树特征:

层序存储位置(k, p)与数组位置(i)之间的关系:i = 2^(p-1) + (q -1)

数组中,结点(p)与左子树(i)的位置关系:i = 2*p + 1

数组中,结点(p)与右子树(i)的位置关系:i = 2*p + 2

数组中,子结点(p)与父亲结点(i)的位置关系:i = (p + 1) / 2 - 1

深度 k 与 结点数 n 之间的关系: n <= (2^k - 1)

// BinaryTree

// BinaryTree

#include

#include

#include

// 定义两个常量

#define MAXSIZE 100// 存储空间初始分配量

#define MAX_TREE_SIZE 100// 二叉树最大结点数

#define TRUE 1

#define FALSE 0

#define STATUS_OK 1

#define STATUS_FAILED 0

typedef int TElemType;

typedef TElemType BinaryTree[MAX_TREE_SIZE];

// 定义二叉树的数据结构

typedef struct

{

int level; // 结点的层

int order; // 本层序号

}Position;

TElemType Nil = 0; // 定义TElemType的空类型

// 构造空二叉树

void InitBiTree(BinaryTree T)

{

for (int i = 0; i < MAX_TREE_SIZE; i++)

{

T[i] = Nil;

}

}

#define ClearBiTree InitBiTree // 在顺序存储结构中,两函数完全一样

int BiTreeEmpty(BinaryTree T)

{

if (T[0] == Nil)

{

return TRUE;

}

else

{

return FALSE;

}

}

void visit(TElemType e)

{

printf(" %d ", e);

}

int Root(BinaryTree T, TElemType* e)

{

if (!BiTreeEmpty(T)) { // 不空,e赋值根结点

*e = T[0];

return STATUS_OK;

} else { // 空,返回错误状态

return STATUS_FAILED;

}

}

// 深度计算

// 利用了性质:深度为k的二叉树的结点数:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值