二叉树的顺序存储结构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



目录
相关文章
|
6天前
|
C语言
C语言指针带代码
C语言指针带代码
19 3
|
1天前
|
编译器 C语言
C语言尾递归知识及代码示例
C语言尾递归知识及代码示例
|
3天前
|
存储 编译器 数据库
【再识C进阶5(上)】详细介绍C语言文件操作——文件是用于存储数据
【再识C进阶5(上)】详细介绍C语言文件操作——文件是用于存储数据
|
8天前
|
C语言
C语言循环结构程序设计详解及代码实例
C语言循环结构程序设计详解及代码实例
14 0
|
8天前
|
存储 C语言 索引
C语言一维数组与二维数组详解及代码实例
C语言一维数组与二维数组详解及代码实例
18 0
|
8天前
|
C语言
C语言中的函数定义与调用详解及代码实例
C语言中的函数定义与调用详解及代码实例
|
9天前
|
存储 C语言 Python
从C语言到C++_24(二叉搜索树)概念+完整代码实现+笔试题(下)
从C语言到C++_24(二叉搜索树)概念+完整代码实现+笔试题
30 3
|
9天前
|
C语言
从C语言到C++_24(二叉搜索树)概念+完整代码实现+笔试题(中)
从C语言到C++_24(二叉搜索树)概念+完整代码实现+笔试题
14 1
|
9天前
|
算法 测试技术 C语言
从C语言到C++_24(二叉搜索树)概念+完整代码实现+笔试题(上)
从C语言到C++_24(二叉搜索树)概念+完整代码实现+笔试题
18 0
|
C语言
c语言部分库函数,代码实现,以及细节理解
 代码来自:   http://blog.csdn.net/v_JULY_v     //得9 分 //为了实现链式操作,将目的地址返回,加2 分! char * strcpy( char *strDest, const char *strSrc ) { assert( (...
876 0