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

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

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


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


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


例如一颗普通二叉树:


5f4381f48b73470aa766fd34e9483502.png


转为顺序存储就为:


93b9f75ae6c14d25a76e8d90b89ba166.png


将树中节点按照层次并从左到右依次标号(1,2,3,...),若节点 i 有左右孩子,则其左孩子节点为 2*i,右孩子节点为 2*i+1。此性质可用于还原数组中存储的完全二叉树。


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


#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 8
using namespace std;
//初始化二叉树
void EmptyTree(int Tree[])
{
    for(int i=0;i<MAX_SIZE;i++)
    {
        Tree[i]=0;
    }
}
//给i节点赋值操作
int setNode(int Tree[],int i,int x)
{
    if(Tree == NULL) {printf("二叉树为空"); return 0;}
    if(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<MAX_SIZE;i++)
    {
        printf("%d ",Tree[i]);
    }
}
int main()
{
    int Tree[MAX_SIZE];
    EmptyTree(Tree);
    setNode(Tree,1,1);
    setLeftChild(Tree,1,2);
    setRightChild(Tree,1,3);
    setRightChild(Tree,2,4);
    setLeftChild(Tree,3,5);
    printTree(Tree);
}

最后存储的树为:


5cccdde7e5f743558c9f49310a27a291.png



目录
相关文章
|
1月前
|
存储 安全 数据管理
C语言之考勤模拟系统平台(千行代码)
C语言之考勤模拟系统平台(千行代码)
55 4
|
25天前
|
存储 算法 程序员
C 语言递归算法:以简洁代码驾驭复杂逻辑
C语言递归算法简介:通过简洁的代码实现复杂的逻辑处理,递归函数自我调用解决分层问题,高效而优雅。适用于树形结构遍历、数学计算等领域。
|
1月前
|
存储 安全 物联网
C语言物联网开发之设备安全与代码可靠性隐患
物联网设备的C语言代码安全与可靠性至关重要。一是防范代码安全漏洞,包括缓冲区溢出和代码注入风险,通过使用安全函数和严格输入验证来预防。二是提高代码跨平台兼容性,利用`stdint.h`定义统一的数据类型,并通过硬件接口抽象与适配减少平台间的差异,确保程序稳定运行。
|
26天前
|
并行计算 算法 测试技术
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面
C语言因高效灵活被广泛应用于软件开发。本文探讨了优化C语言程序性能的策略,涵盖算法优化、代码结构优化、内存管理优化、编译器优化、数据结构优化、并行计算优化及性能测试与分析七个方面,旨在通过综合策略提升程序性能,满足实际需求。
57 1
|
1月前
|
存储 搜索推荐 算法
【数据结构】树型结构详解 + 堆的实现(c语言)(附源码)
本文介绍了树和二叉树的基本概念及结构,重点讲解了堆这一重要的数据结构。堆是一种特殊的完全二叉树,常用于实现优先队列和高效的排序算法(如堆排序)。文章详细描述了堆的性质、存储方式及其实现方法,包括插入、删除和取堆顶数据等操作的具体实现。通过这些内容,读者可以全面了解堆的原理和应用。
89 16
|
1月前
|
C语言
【数据结构】二叉树(c语言)(附源码)
本文介绍了如何使用链式结构实现二叉树的基本功能,包括前序、中序、后序和层序遍历,统计节点个数和树的高度,查找节点,判断是否为完全二叉树,以及销毁二叉树。通过手动创建一棵二叉树,详细讲解了每个功能的实现方法和代码示例,帮助读者深入理解递归和数据结构的应用。
132 8
|
2月前
|
存储 搜索推荐 C语言
深入C语言指针,使代码更加灵活(二)
深入C语言指针,使代码更加灵活(二)
|
2月前
|
存储 程序员 编译器
深入C语言指针,使代码更加灵活(一)
深入C语言指针,使代码更加灵活(一)
|
2月前
|
C语言
深入C语言指针,使代码更加灵活(三)
深入C语言指针,使代码更加灵活(三)
深入C语言指针,使代码更加灵活(三)
|
2月前
|
编译器 C语言 Python
C语言结构
C语言结构
21 0