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;
}