二叉树构造、遍历和释放--自己写数据结构
2014-12-16 16:22
246 查看
直接上代码
bitree.h文件如下:
bittree.c文件如下
测试文件test.c如下:
运行结果如下:
bitree.h文件如下:
#ifndef _BITREE_H_ #define _BITREE_H_ typedef char TElemType; typedef struct _BitNode { TElemType data; struct _BitNode *lchild,*rchild; }BitNode,*pBitNode; int bittree_creat(BitNode **T); void pre_order(BitNode *T); void mid_order(BitNode *T); void post_order(BitNode *T); #endif
bittree.c文件如下
/*************************** 时间:2014.12.16 作者:XIAO_PING_PING 编译环境:DEV-C++ 4.9.9.2 内容:二叉树构造、遍历和释放 功能: 学习写数据结构 ****************************/ /******************************** (1)scanf("%c",&ch);和 scanf("%d",&ch); 的区别在于前者是一次性输入,后者需要输入数字后回车才能返回 (2)C语言指针作为函数的参数时,函数不能改变指针的值, 只能改变指针指向内容的值(只能用二级指针),C++可以通过*(&p)引用达到在函数内部 改变参数指针的值 (3)故也不可能实现将指针(包括结构体指针)作为函数参数,对其在 函数内部非配空间的任务(但是可以完成free操作),另外一种解决的办法是在函数内部初始化一个 指针后分配空间,然后用返回值的形式传递给外部指针 *********************************/ #include <string.h> #include <stdio.h> #include "bitree.h" /*创建二叉树*/ int bittree_creat(BitNode **T)//C语言函数内部不能改变作为参数的指针 { char ch; scanf("%c",&ch); //*T = *(T)->lchild ; if('0' == ch) { *T = NULL; return 0; } *T = (BitNode *)malloc(sizeof(BitNode)); if(NULL == *T) { return -1; } (*T)->data = ch; bittree_creat(&((*T)->lchild)); bittree_creat(&((*T)->rchild)); return 1; } /*前序遍历二叉树*/ void pre_order(BitNode *T) { if(NULL == T) { return; } printf("%c ",T->data); pre_order(T->lchild); pre_order(T->rchild); } /*中序遍历二叉树*/ void mid_order(BitNode *T) { if(NULL == T) { return; } mid_order(T->lchild); printf("%c ",T->data); mid_order(T->rchild); } /*后序遍历二叉树*/ void post_order(BitNode *T) { if(NULL == T) { return; } post_order(T->lchild); post_order(T->rchild); printf("%c ",T->data); } /*释放二叉树*/ int free_btree(BitNode *T) { if(NULL == T) { return 0; } free_btree(T->lchild); free_btree(T->rchild); free(T); return 1; }
测试文件test.c如下:
/************************ *************************/ #include <string.h> #include <stdio.h> #include <conio.h> #include "bitree.h" int main() { pBitNode btree; printf("Create binary tree:\n"); bittree_creat(&btree); printf("\n前序:"); pre_order(btree); printf("\n中序:"); mid_order(btree); printf("\n后序:"); post_order(btree); printf("\n销毁二叉树"); free_btree(btree); getch(); return 0; }
运行结果如下:
相关文章推荐
- [数据结构]二叉树的遍历及构造树
- 【九度】由前序和中序构造二叉树并求后序遍历
- 数据结构--二叉树--后续遍历二叉树(顺序结构)
- 数据结构----二叉树----建立与遍历
- 数据结构-二叉树的遍历
- 数据结构----二叉树(1)遍历,建立,应用
- 数据结构学习笔记-二叉树的前、中、后序遍历,递归、非递归方式
- 数据结构学习7——二叉树的遍历
- 数据结构-二叉树的先序、中序、后序遍历
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- [数据结构]对三序非递归遍历二叉树的理解
- 数据结构(六)——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构—树和二叉树-2.二叉树的层次遍历(BFS)
- 二叉树建立和遍历,(数据结构清华大学版130页遍历实现)
- 数据结构 ——二叉树 前序、中序、后序、层次遍历及非递归实现 查找、统计个数、比较、求深度的递归实现
- 数据结构-二叉树的遍历(类C语言描写叙述)
- 数据结构笔记--二叉树的非递归遍历与按层遍历分析
- 二叉树的层次,中序非递归遍历,以递归前序的方式构造二叉树,将二叉树中的e更新为d,输出从根结点出发 到指定结点,依次经过的祖先(即路径),由前序和中序还原二叉树
- 二叉树--根据遍历构造二叉树
- C++之二叉树的创建、查找、四种次序的周游遍历方法以及内存的释放