#include<stdio.h>
#include<stdlib.h>
typedef struct treenode{
int data;
struct treenode *lchild,*rchild;
}treenode,*tree;
//查看一个结点的值
void visit(treenode *p){
if(p==NULL){
printf("空节点");
}
else
printf("结点的值为%d\n",p->data);
}
//先序遍历的方式插入值
void pre_insert_tree(tree *t){//没有*号则无法查找创建好的树 起地址传递的作用(树节点为NULL)
int a=0;
printf("输入结点的值(输入1000则停止插入数据)");
scanf("%d",&a);
if(a!=1000){
*t=(treenode *)malloc(sizeof(treenode));
(*t)->data=a;
(*t)->lchild=NULL;
(*t)->rchild=NULL;
pre_insert_tree(&(*t)->lchild);
pre_insert_tree(&(*t)->rchild);
}
}
//先序遍历查看数据
void pre_order(tree t){
if(t!=NULL){
visit(t);
pre_order(t->lchild);
pre_order(t->rchild);
}
}
//中序遍历查看数据
void med_order(tree t){
if(t!=NULL){
med_order(t->lchild);
visit(t);
med_order(t->rchild);
}
}
//后序遍历查看数据
void pos_order(tree t){
if(t!=NULL){
pos_order(t->lchild);
pos_order(t->rchild);
visit(t);
}
}
int main(){
tree t1=NULL;
pre_insert_tree(&t1);
pre_order(t1);
med_order(t1);
pos_order(t1);
return 0;
}
//直接插入结点的值
void direct_test(){
int a;
tree t1=NULL;
t1=(treenode *)malloc(sizeof(treenode));
printf("请输入结点的值 ");
scanf("%d",&a);
t1->data=a;
t1->lchild=NULL;
t1->rchild=NULL;
visit(t1);//根节点
treenode *t2=(treenode *)malloc(sizeof(treenode));
printf("请输入结点的值 ");
scanf("%d",&a);
t2->data=a;
t2->lchild=NULL;
t2->rchild=NULL;
t1->lchild=t2;
visit(t2);//根节点的左孩子 之后的结点以此类推
}