二叉树的顺序存储结构C语言代码实现

二叉树的顺序存储结构C语言代码实现,第1张

二叉树的顺序存储是指用一组地址连续的存储单元依次自上而下、自左至右存储完全二叉树上的节点元素,即将完全二叉树上的编号为i的结点元素存储在一维数组下摆为i-1的分量中。

依据二叉树的性质,完全二叉树和满二叉树采用顺序存储比较合适,树中节点的序号可以唯一地反映节点之间的逻辑关系,这样既鞥最大可能地节省存储空间,又能利用数组元素的下标值。

普通二叉树转完全二叉树的方法很简单,只需给二叉树额外添加一些节点,将其"拼凑"成完全二叉树即可。

例如一颗普通二叉树:

转为顺序存储就为:

将树中节点按照层次并从左到右依次标号(1,2,3,...),若节点 i 有左右孩子,则其左孩子节点为 2*i,右孩子节点为 2*i+1。

此性质可用于还原数组中存储的完全二叉树。

二叉树顺序结构存储实现代码:

#include 
#include 
#include 
#define MAX_SIZE 8
using namespace std;
//初始化二叉树
void EmptyTree(int Tree[])
{
    for(int i=0;i=MAX_SIZE) {printf("超出数组范围");return 0;}
    Tree[i]=x;
    return 1;
}
//给i节点的左孩子设置值
int setLeftChild(int Tree[],int i,int x)
{
    if(Tree == NULL) {printf("二叉树为空"); return 0;}
    if(i*2 >= MAX_SIZE) {printf("超出数组范围");return 0;}
    Tree[i*2]=x;
    return 1;
}
//给i节点的右孩子设置值
int setRightChild(int Tree[],int i,int x)
{
    if(Tree == NULL) {printf("二叉树为空"); return 0;}
    if(i*2+1 >= MAX_SIZE) {printf("超出数组范围");return 0;}
    Tree[i*2+1]=x;
    return 1;
}
//打印二叉树
void printTree(int Tree[])
{
    for(int i=1;i

最后存储的树为:

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/langs/674832.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-04-19
下一篇 2022-04-19

发表评论

登录后才能评论

评论列表(0条)