数据结构 二叉树的先序 中序 后序遍历(linux 下c语言实现)
2017-07-29 23:33
435 查看
测试序列:AB#CD###E#FGH##K###
一.头文件btree.h实现
#ifndef __BTREE_H__
#define __BTREE_H__
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef char datatype_bt;
typedef struct btreenode
{
datatype_bt data;
struct btreenode *lchild,*rchild;
}btree_node,*btree_pnode;
extern void create_btree(btree_pnode *T);
extern void pre_order(btree_pnode t);
extern void mid_order(btree_pnode t);
extern void last_order(btree_pnode t);
#endif
二.函数实现btree.c
#include"btree.h"
void create_btree(btree_pnode *T)
{
datatype_bt ch;
scanf("%c",&ch);
if('#' == ch)
*T = NULL;
else
{
*T = (btree_pnode)malloc(sizeof(btree_node));
if(NULL == *T)
{
perror("malloc");
exit(1);
}
(*T)->data = ch;
create_btree(&(*T)->lchild);
create_btree(&(*T)->rchild);
}
}
//先序遍历
void pre_order(btree_pnode t)
{
if(t != NULL)
{
//访问根结点
printf("%c",t->data);
//先序遍历左子树
pre_order(t->lchild);
//先序遍历右子树
pre_order(t->rchild);
}
}
//中序遍历
void mid_order(btree_pnode t)
{
if(t != NULL)
{
//先序遍历左子树
mid_order(t->lchild);
printf("%c",t->data);
//先序遍历右子树
mid_order(t->rchild);
}
}
//后序遍历
void last_order(btree_pnode t)
{
if(t != NULL)
{
//先序遍历左子树
last_order(t->lchild);
printf("%c",t->data);
//先序遍历右子树
last_order(t->rchild);
}
}
三.包含主函数的test.c文件
#include"btree.h"
int main()
{
btree_pnode t;
create_btree(&t);
printf("先序遍历序列\n");
pre_order(t);
puts("");
printf("中序遍历序列\n");
mid_order(t);
puts("");
printf("后序遍历序列\n");
last_order(t);
puts("");
return 0;
}
四.makefile文件实现
CC = gcc
CFLAGS = -Wall -g -O0
SRC = btree.c test.c
OBJS = test
$(OBJS):$(SRC)
$(CC) $(CFLAGS) -o $@ $^
clean:
$(RM) $(OBJS) .*.sw?
一.头文件btree.h实现
#ifndef __BTREE_H__
#define __BTREE_H__
#include<stdio.h>
#include<stdlib.h>
#include<stdbool.h>
typedef char datatype_bt;
typedef struct btreenode
{
datatype_bt data;
struct btreenode *lchild,*rchild;
}btree_node,*btree_pnode;
extern void create_btree(btree_pnode *T);
extern void pre_order(btree_pnode t);
extern void mid_order(btree_pnode t);
extern void last_order(btree_pnode t);
#endif
二.函数实现btree.c
#include"btree.h"
void create_btree(btree_pnode *T)
{
datatype_bt ch;
scanf("%c",&ch);
if('#' == ch)
*T = NULL;
else
{
*T = (btree_pnode)malloc(sizeof(btree_node));
if(NULL == *T)
{
perror("malloc");
exit(1);
}
(*T)->data = ch;
create_btree(&(*T)->lchild);
create_btree(&(*T)->rchild);
}
}
//先序遍历
void pre_order(btree_pnode t)
{
if(t != NULL)
{
//访问根结点
printf("%c",t->data);
//先序遍历左子树
pre_order(t->lchild);
//先序遍历右子树
pre_order(t->rchild);
}
}
//中序遍历
void mid_order(btree_pnode t)
{
if(t != NULL)
{
//先序遍历左子树
mid_order(t->lchild);
printf("%c",t->data);
//先序遍历右子树
mid_order(t->rchild);
}
}
//后序遍历
void last_order(btree_pnode t)
{
if(t != NULL)
{
//先序遍历左子树
last_order(t->lchild);
printf("%c",t->data);
//先序遍历右子树
last_order(t->rchild);
}
}
三.包含主函数的test.c文件
#include"btree.h"
int main()
{
btree_pnode t;
create_btree(&t);
printf("先序遍历序列\n");
pre_order(t);
puts("");
printf("中序遍历序列\n");
mid_order(t);
puts("");
printf("后序遍历序列\n");
last_order(t);
puts("");
return 0;
}
四.makefile文件实现
CC = gcc
CFLAGS = -Wall -g -O0
SRC = btree.c test.c
OBJS = test
$(OBJS):$(SRC)
$(CC) $(CFLAGS) -o $@ $^
clean:
$(RM) $(OBJS) .*.sw?
相关文章推荐
- 二叉树前序、中序、后序非递归遍历实现(C语言)
- 数据结构 —— 二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构-二叉树(递归前序、中序、后序遍历;栈实现中序变量;二叉树镜像)
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构 c语言实现 二叉树的层次遍历(linux下实现)
- 数据结构 ——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构--java实现二叉树的先序、中序、后序、层次遍历及根据先序中序建立二叉树
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构_二叉树的先序建立与先序,中序,后序(递归)遍历方式_C语言源代码
- 数据结构二叉树的实现,前序、中序、后序遍历
- 用c语言创建一颗二叉树,用递归方法实现对其进行先序、中序和后序遍历的操作。
- C语言非递归实现二叉树的先序、中序、后序、层序遍历
- C语言实现 前序、中序、后序遍历二叉树
- 数据结构---二叉树的前序、中序、后序遍历的递归和非递归 实现(C++)
- 数据结构二叉树的实现,前序、中序、后序遍历
- c语言实现二叉树的建立与前序、中序、后序、层序遍历
- 二叉树的建立以及先序、中序、后序遍历C语言实现
- c语言实现二叉树先序,中序,后序(递归),层次遍历,求叶子节点个数及树的深度,下一篇写非递归的遍历
- 数据结构-二叉树的前序、中序、后序遍历的递归和非递归实现
- C语言递归实现二叉树的先序、中序、后序遍历