#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#define MaxSize 100
typedef char DataType;
typedef struct
{
DataType data[MaxSize];
int biTreeNum;
} SeqBiTree;
SeqBiTree *CreateBiTree(SeqBiTree *tree,int n)
{
tree->biTreeNum = n;
if (n == 0) return NULL;
int i = 1;
int p = i;
while (i <= n)
{
scanf_s("%c", &(tree->data[p - 1]));
if (tree->data[p - 1] != '#')
{
i++;
p++;
}
else
p++;
}
return tree;
}
void PrePrint(DataType Seq[],int num)
{
if (Seq[num - 1] != '#')
printf("%c ", Seq[num - 1]);
else return;
PrePrint(&(Seq[2*num-1]),2*num);
PrePrint(&(Seq[2*num+1-1]),2*num+1);
}
void PreOrder(SeqBiTree* tree)
{
if (tree->biTreeNum == 0)
{
printf("二叉树为空,先序遍历结束\n");
return;
}
int i = 1;
PrePrint(&(tree->data[i-1]),i);
printf("\n");
}
void InPrint(DataType Seq[], int num)
{
if (Seq[2*num - 1] != '#')
printf("%c ", Seq[2*num - 1]);
else return;
InPrint(&(Seq[num-1]),num);
InPrint(&(Seq[2*num+1-1]), 2*num+1);
}
void InOrder(SeqBiTree* tree)
{
if (tree->biTreeNum == 0)
{
printf("二叉树为空,中序遍历结束\n");
return;
}
int i = 1;
InPrint(&(tree->data[i-1]), i);
printf("\n");
}
void PostPrint(DataType Seq[], int num)
{
if (Seq[2 * num - 1] != '#')
printf("%c ", Seq[2 * num - 1]);
else return;
PostPrint(&(Seq[2 * num + 1 - 1]), 2 * num + 1);
PostPrint(&(Seq[num - 1]), num);
}
void PostOrder(SeqBiTree* tree)
{
if (tree->biTreeNum == 0)
{
printf("二叉树为空,后序遍历结束\n");
return;
}
int i = 1;
PostPrint(&(tree->data[i - 1]), i);
printf("\n");
}
void LevelOrder(SeqBiTree* tree)
{
if (tree->biTreeNum == 0) { printf("层序遍历为空,返回\n"); return; }
int i = 1;
int p = i;
while (i <= tree->biTreeNum)
{
if (tree->data[p - 1] != '#')
{
printf("%c ", tree->data[p - 1]);
i++; p++;
}
else p++;
}
printf("\n");
}
int main()
{
int NUM;
printf("输入将要创建的二叉树的结点数:\n");
scanf_s("%d", &NUM);
printf("按照层序遍历的顺序建立结点数为%d的二叉树\n",NUM);
SeqBiTree* T = (SeqBiTree*)malloc(sizeof(SeqBiTree));
T = CreateBiTree(T, NUM);
printf("先序遍历创建的二叉树\n");
PreOrder(T);
printf("中序遍历创建的二叉树\n");
InOrder(T);
printf("后序遍历创建的二叉树\n");
PostOrder(T);
printf("层序遍历建立的二叉树\n");
LevelOrder(T);
printf("\n");
printf("若创建一个空的二叉树并依次进行遍历结果如下:\n");
SeqBiTree* N = (SeqBiTree*)malloc(sizeof(SeqBiTree));
N = CreateBiTree(N, 0);
PreOrder(N);
InOrder(N);
PostOrder(N);
LevelOrder(N);
return 0;
}
问题出在创建二叉树函数里,输入见下:
但是发现了问题,见下:
希望能得到解决。谢谢