#include<stdio.h>
#include<stdlib.h>
#define OK 0
#define ERROR 1
typedef char ElemType;
FILE *fp;
void InitFile()
{
fp = fopen("data.txt", "r+");
if (!fp) exit(ERROR);
return;
}
typedef bool Status;
//完全二叉树的顺序存储表示
typedef struct
{
ElemType *data;
int l;
}FBTree,*FBTreePtr;
Status CreateFBTree(FBTree &T)
{
fscanf_s(fp, "%d", &T.l);// 按 数组 顺序 初始化完全二叉树...
if (!(T.data = (ElemType *)malloc(sizeof(ElemType)*(T.l+1)))) return ERROR;
for (int i = 1; i <= T.l; i++) fscanf_s(fp, "%c", T.data + i);
return OK;
}
Status DestroyFBTree(FBTree &T)
{
free(T.data);
return OK;
}
int Get_lchild(FBTree T,int i)//得到 左孩子的数组索引
{
return (2 * i > T.l) ? -1 : 2 * i;
}
int Get_rchild(FBTree T, int i)
{
return (2 * i +1 > T.l) ? -1 : 2 * i +1;
}
Status InorderTree(FBTree T,int i)
{
if (i <= T.l)
{
InorderTree(T, 2 * i);
printf("%c ", T.data[i]);
InorderTree(T, 2 * i + 1);
}
return OK;
}
Status PreorderTree(FBTree T,int i)
{
if (i <= T.l)
{
printf("%c ", T.data[i]);
PreorderTree(T, 2 * i);
PreorderTree(T, 2 * i + 1);
}
return OK;
}
Status PostorderTree(FBTree T, int i)
{
if (i <= T.l)
{
PostorderTree(T, 2 * i);
PostorderTree(T, 2 * i + 1);
printf("%c ", T.data[i]);
}
return OK;
}
int main()
{
InitFile();
FBTree A;
CreateFBTree(A);
printf("中序遍历:\n");
InorderTree(A, 1);
printf("\n先序遍历:\n");
PreorderTree(A, 1);
printf("\n后序遍历:\n");
PostorderTree(A, 1);
putchar(10);
fclose(fp);
return 0;
}
12.完全二叉树的顺序存储表示
最新推荐文章于 2024-01-09 22:13:06 发布