(C语言)二叉树实现(数据结构十三)
来源:互联网 发布:mac pdf怎么删除文字 编辑:程序博客网 时间:2024/04/29 20:45
1.数据类型定义
在代码中为了清楚的表示一些错误和函数运行状态,我们预先定义一些变量来表示这些状态。在head.h头文件中有如下定义:
//定义数据结构中要用到的一些变量和类型#ifndef HEAD_H#define HEAD_H#include <stdio.h>#include <malloc.h>#include <stdlib.h>#include <math.h>#define TRUE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW -2 //分配内存出错typedef int Status; //函数返回值类型typedef int ElemType; //用户定义的数据类型#endif
2.数据结构实现
typedef struct BiNode{ElemType data;struct BiNode *left,*right;}BiNode,*pBiNode;
3.二叉树代码实现
BiTree.h代码如下:
#ifndef BITREE_H#define BITREE_H#include "head.h"typedef struct BiNode{ElemType data;struct BiNode *left,*right;}BiNode,*pBiNode;Status InsertRight(pBiNode &root,ElemType e);Status InsertLeft(pBiNode &root,ElemType e);Status InitBiTree(pBiNode &tree){tree=(pBiNode)malloc(sizeof(BiNode));if(!tree) return OVERFLOW;tree->data=-999999;tree->left=NULL;tree->right=NULL;return OK;}Status BiTreeEmpty(pBiNode root){if(root==NULL) return ERROR;return root->left==root->right && root->data==-999999;}Status HasNoNode(pBiNode root){if(root==NULL) return ERROR;return root->left==root->right ;}Status CreatTreeNode(pBiNode &node,ElemType e){node=(pBiNode)malloc(sizeof(BiNode));if(!node) return OVERFLOW;node->data=e;node->left=NULL;node->right=NULL;return OK;}Status InsertRight(pBiNode &root,ElemType e){if(root->right==NULL){if(e>root->data){pBiNode p;CreatTreeNode(p,e);root->right=p;return OK;}else{pBiNode p;CreatTreeNode(p,e);root->left=p;return OK;}}else{e>root->data? InsertRight(root->right,e):InsertLeft(root,e);}}Status InsertLeft(pBiNode &root,ElemType e){if(root->left==NULL){if(e>root->data){pBiNode p;CreatTreeNode(p,e);root->right=p;return OK;}else{pBiNode p;CreatTreeNode(p,e);root->left=p;return OK;}}else{e<=root->data?InsertLeft(root->left,e):InsertRight(root,e);}}Status InsertTree(pBiNode &root,ElemType e){if(BiTreeEmpty(root)){root->data=e;return true;}if(e>root->data){InsertRight(root,e);}else{InsertLeft(root,e);}}Status CreateBiTree(pBiNode &root,ElemType *a,int n){for (int i=0;i<n;i++){InsertTree(root,a[i]);}return true;}Status print(ElemType e ){printf("%d ",e);return true;}Status PreOrderTraverse(pBiNode root,Status(*p)(int)){if(root){(*p)(root->data);PreOrderTraverse(root->left,p);PreOrderTraverse(root->right,p);}return OK;}Status MiddleOrderTraverse(pBiNode root,Status(*p)(int)){if(root){MiddleOrderTraverse(root->left,p);(*p)(root->data);MiddleOrderTraverse(root->right,p);}return OK;}Status AfterOrderTraverse(pBiNode root,Status(*p)(int)){if(root){AfterOrderTraverse(root->left,p);AfterOrderTraverse(root->right,p);(*p)(root->data);}return OK;}Status ClearBiTree(pBiNode &root){if(root){ClearBiTree(root->left);ClearBiTree(root->right);free(root);root==NULL;}return OK;}#endif
4.测试代码
#include "BiTree.h"void main(){ElemType a[14]={100,50,200,40,30,45,60,55,61,200,150,300,250,400};pBiNode root;InitBiTree(root);CreateBiTree(root,a,14);printf("前序:");PreOrderTraverse(root,print);printf("\n中序:");MiddleOrderTraverse(root,print);printf("\n后序:");AfterOrderTraverse(root,print);ClearBiTree(root);}
5.插入数据如下:
前序:100 50 40 30 45 60 55 61 200 150 300 250 400中序:30 40 45 50 55 60 61 100 150 200 250 300 400后序:30 45 40 55 61 60 50 150 250 400 300 200 100
- (C语言)二叉树实现(数据结构十三)
- [数据结构]C语言二叉树的实现
- c语言实现二叉树数据结构
- C语言二叉树的数据结构实现
- 数据结构:二叉查找树(C语言实现)
- 【数据结构】数据结构C语言的实现(简单二叉树)
- C语言-数据结构-二叉树
- 数据结构C语言实现系列[7]——二叉树
- 数据结构C语言实现系列——二叉树
- 数据结构C语言实现系列——二叉树[转]
- 数据结构C语言实现系列——二叉树
- 数据结构C语言实现之二叉树链式结构
- 数据结构.二叉树的基本操作(C语言实现)
- 数据结构之---C语言实现二叉树的顺序存储
- 数据结构之---C语言实现线索二叉树
- 数据结构(二叉树子系统:c语言实现)
- 数据结构—二叉树(C语言实现)
- 二叉查找树 - C语言实现(摘自数据结构与算法分析 C语言描述)
- Opencv的cvFindContours使用注意事项!!
- linux centos install ruby
- 南阳理工ACM 558 一二三
- 偶然看到的SIGCHLD和waitpid的使用
- 采用yum方式安装mysql
- (C语言)二叉树实现(数据结构十三)
- cvCopy的使用注意事项!!
- 常见规则引擎技术
- windows下编译boost for android
- 南阳理工ACM 506 洗澡
- hive 集成hbase 笔记
- struts 几个标签用法 s:iterator的三种输出方式 对href自动符值
- Boost for Android
- CvMinAreaRect2函数的bug!!!!!