#include<stdio.h>
#include<stdlib.h>
#define scanf scanf_s
const int N = 10;
typedef struct Node
{
int data;
Node* left;
Node* right;
};
//创建
Node* creatNode(int a)
{
Node* newNode = (Node*)malloc(sizeof(Node));
if (!newNode)printf("分配失败\n");
newNode->data = a;
newNode->left = NULL;
newNode->right = NULL;
return newNode;
}
//插入
Node* myinsert(Node* place, int a)
{
if (place == NULL)return creatNode(a);
if (a < place->data) {
place->left = myinsert(place->left, a);
}
else if (a > place->data) {
place->right = myinsert(place->right, a);
}
else printf("输入重复\n");
return place;
}
//前序
void qx(Node* Node)
{
if (Node == NULL)return;
printf("->%d", Node->data);
qx(Node->left);
qx(Node->right);
}
//后序
void hx(Node* Node)
{
if (Node == NULL)return;
hx(Node->left);
hx(Node->right);
printf("->%d", Node->data);
}
//中序
void zx(Node* Node)
{
if (Node == NULL)return;
zx(Node->left);
printf("->%d", Node->data);
zx(Node->right);
}
//层序
void cx(Node* Node1, Node* top,int line,int k,int kk)
{
if (Node1 == NULL)return;
if (line!=k)
{
cx(Node1->left, top, line + 1, k, 0);
cx(Node1->right, top, line + 1, k, 0);
return;
}
printf("第%d层:%d ",line, Node1->data);
if (!kk)return;
for (int i = 1; i < N; i++)
{
printf("\n");
cx(top, top, 0, k + i, 1);
}
}
//释放
void myfree(Node* Node)
{
if (Node == NULL)return;
myfree(Node->left);
myfree(Node->right);
free(Node);
}
int main()
{
Node* list = NULL;
list = myinsert(list,3);
list = myinsert(list, 1);
list = myinsert(list, 2);
list = myinsert(list, 0);
list = myinsert(list, 5);
list = myinsert(list, 4);
list = myinsert(list, 6);
int a;
int n; scanf("%d", &n);//输入n个数
for (int i = 0; i < n; i++)
{
scanf("%d", &a);
list = myinsert(list, a);
}
printf("前序:");
qx(list);
printf("\n");
printf("中序:");
zx(list);
printf("\n");
printf("后序:");
hx(list);
printf("\n");
printf("层序:");
cx(list,list,0,0,1);
myfree(list);
printf("\n");
printf("检验:%d",list->data);//检验是否释放完毕
return 0;
}
//初始树为: 3
1 5
0 2 4 6