二叉树
btree.h
#ifndef __BTREE_H__
#define __BTREE_H__
#include <stdio.h>
#include <stdlib.h>
#include <stdbool.h>
typedef struct NODE{
int data;
struct NODE*lchild;
struct NODE*rchild;
}btreenode;
void btree_create(btreenode*BT);
void pre_order(btreenode*BT);
void mid_order(btreenode*BT);
void back_order(btreenode*BT);
void level_order(btreenode*BT);
void order(void (*pfun)(btreenode*BT),btreenode*BT);
btree.c
#include "btree.h"
static level = 0;
void btree_create(btreenode*BT)
{
int temp;
printf("\n(-1==stop;level = %d层)输入:",level);
scanf("%d",&temp);
if(temp == -1)
{
level = level-1;
printf("\n退出一层:level = %d",level);
}
else
{
BT->lchild = (btreenode*)malloc(sizeof(btreenode));
BT->rchild = (btreenode*)malloc(sizeof(btreenode));
BT->data = temp;
level = level+1;
btree_create(BT->lchild);
btree_create(BT->rchild);
}
}
void pre_order(btreenode*BT)
{
if(BT->data != 0)
printf("%d\t",BT->data);
if(BT->rchild!=NULL)
pre_order( BT->lchild );
if(BT->rchild!=NULL)
pre_order( BT->rchild );
}
void mid_order(btreenode*BT)
{
if(BT->lchild!=NULL)
pre_order( BT->lchild );
if(BT->data != 0)
printf("%d\t",BT->data);
if(BT->rchild!=NULL)
pre_order(BT->rchild);
}
void back_order(btreenode*BT)
{
if(BT->lchild!=NULL)
pre_order( BT->lchild );
if(BT->rchild!=NULL)
pre_order(BT->rchild);
if(BT->data != 0)
printf("%d\t",BT->data);
}
void order(void (*pfun)(btreenode*BT),btreenode*BT)
{
pfun(BT);
}
btree_text.c
#include "btree.h"
void main()
{
btreenode*BT;
BT = (btreenode*)malloc(sizeof(btreenode));
printf("\n--根节点 == level0\n");
btree_create(BT);
printf("\n先序排序:");
order(pre_order,BT);
printf("\n中序排序:");
order(mid_order,BT);
printf("\n后序排序:");
order(back_order,BT);
}
Makefile
VPATH=/home/yqj/单链表/
btree_text:btree.o btree_text.c
gcc -g btree.o btree_text.c -o btree_text
btree.o:btree.c btree.h
gcc -g btree.c -c -o btree.o
.PHONY:clean
clean:
rm -rf btree.o btree_tex
运行结果
root@ubuntu:/home/yqj/desktop/二叉树# ./btree_text
--根节点 == level0
(-1==stop;level = 0层)输入:1
(-1==stop;level = 1层)输入:2
(-1==stop;level = 2层)输入:3
(-1==stop;level = 3层)输入:-1
退出一层:level = 2
(-1==stop;level = 2层)输入:4
(-1==stop;level = 3层)输入:-1
退出一层:level = 2
(-1==stop;level = 2层)输入:-1
退出一层:level = 1
(-1==stop;level = 1层)输入:-1
退出一层:level = 0
(-1==stop;level = 0层)输入:5
(-1==stop;level = 1层)输入:6
(-1==stop;level = 2层)输入:-1
退出一层:level = 1
(-1==stop;level = 1层)输入:7
(-1==stop;level = 2层)输入:-1
退出一层:level = 1
(-1==stop;level = 1层)输入:-1
退出一层:level = 0
(-1==stop;level = 0层)输入:-1
退出一层:level = -1
先序排序:1 2 3 4 5 6 7
中序排序:2 3 4 1 5 6 7
后序排序:2 3 4 5 6 7 1