//构造链树
#include<stdio.h>
#include<stdlib.h>
//构造链二叉树 并对其初始化
typedef struct BiTreenode{
int data;//存储的结点的内容
struct BiTreenode* left;//左孩子
struct BiTreenode* right;//右孩子
}BiTreenode,* BiTree;
void initiaBiTree(BiTree &T){
//构造空树
T = NULL;
printf("成功构造一棵空树\n");
}
bool judgeIntia(BiTree &T){
if(T == NULL){
printf("初始化成功!\n");
return true;
}
else{
printf("初始化失败!\n");
return false;
}
}
//构造树
void setTree(BiTree &T){
int ele;
printf("请输入你想要输入的元素大小(除-1外)\n");
scanf("%d",&ele);
if(ele == -1){
T = NULL;
return;
}
else{
T = (BiTreenode*)malloc(sizeof(BiTreenode));
T->data = ele;
T->left = NULL;
T->right = NULL;
setTree(T->left);
printf("左子树构建完毕!\n");
setTree(T->right);
printf("右子树构建完毕!\n");
}
}
//对树进行遍历
void output(BiTree &T){
if(T == NULL){
printf("此处为空,无法进行遍历操作!\n");
}
else{
printf("%d ",T->data);
}
}
//先序遍历
void firstout(BiTree &T){
if(T != NULL){
output(T);
firstout(T->left);
firstout(T->right);
}
}
//中序遍历
void middleout(BiTree &T){
if(T != NULL){
middleout(T->left);
output(T);
middleout(T->right);
}
}
//后序遍历
void lastout(BiTree &T){
if(T != NULL){
lastout(T->left);
lastout(T->right);
output(T);
}
}
int main(){
BiTree T;
initiaBiTree(T);
judgeIntia(T);
setTree(T);
firstout(T);
printf("\n");
printf("先序遍历执行完毕!\n");
middleout(T);
printf("\n");
printf("中序遍历执行完毕!\n");
lastout(T);
printf("\n");
printf("后序遍历执行完毕!\n");
return 0;
}
/*
递归递归递归!
7 5 9 8 -1 -1 3 -1 -1 3 -1 -1 1 3 -1 -1 6 -1 -1
*/