c语言实现二叉树(直接插入结点、 先序遍历插入结点、 先序、中序、后序遍历)

#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);//根节点的左孩子 之后的结点以此类推
}

 

posted @ 2021-11-15 19:40  大耿2844  阅读(527)  评论(0)    收藏  举报