网站建设刷赞和vip,90平装修大约多少钱,可以做反链的网站,织梦cms网站模板修改1.数据类型定义在代码中为了清楚的表示一些错误和函数运行状态#xff0c;我们预先定义一些变量来表示这些状态。在head.h头文件中有如下定义#xff1a; //定义数据结构中要用到的一些变量和类型
#ifndef HEAD_H
#define HEAD_H#include stdio.h
#include mallo… 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.树的头文件 BiTree.h代码如下: #ifndef BITREE_H
#define BITREE_H#include head.h//Link为指针 Thread为线索
typedef enum PointerTag {Link,Thread};typedef struct BiNode{ElemType data;struct BiNode *left,*right;int LTag,RTag; //左右标志
}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-leftNULL;tree-rightNULL;return OK;
}
Status BiTreeEmpty(pBiNode root){if(rootNULL) return ERROR;return root-leftroot-right root-data-999999;
}Status HasNoNode(pBiNode root){if(rootNULL) return ERROR;return root-leftroot-right ;
}Status CreatTreeNode(pBiNode node,ElemType e){node(pBiNode)malloc(sizeof(BiNode));if(!node) return OVERFLOW;node-datae;node-leftNULL;node-rightNULL;return OK;
}
Status InsertRight(pBiNode root,ElemType e){if(root-rightNULL){if(eroot-data){pBiNode p;CreatTreeNode(p,e);root-rightp;return OK;}else{pBiNode p;CreatTreeNode(p,e);root-leftp;return OK;}}else{eroot-data? InsertRight(root-right,e):InsertLeft(root,e);}}
Status InsertLeft(pBiNode root,ElemType e){if(root-leftNULL){if(eroot-data){pBiNode p;CreatTreeNode(p,e);root-rightp;return OK;}else{pBiNode p;CreatTreeNode(p,e);root-leftp;return OK;}}else{eroot-data?InsertLeft(root-left,e):InsertRight(root,e);}}Status InsertTree(pBiNode root,ElemType e){if(BiTreeEmpty(root)){root-datae;return true;}if(eroot-data){InsertRight(root,e);}else{InsertLeft(root,e);}
}Status CreateBiTree(pBiNode root,ElemType *a,int n){for (int i0;in;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);rootNULL;}return OK;
}#endif 3.线索二叉树代码 #include BiTree.h//中序线索
void InOrder( pBiNode root,pBiNode pre){if (root!NULL){InOrder(root-left,pre);if (root-leftNULL){root-leftpre;root-LTag1;}if (pre!NULL pre-rightNULL){pre-rightroot;pre-RTag1;}preroot;InOrder(root-right,pre);}
}
//线索
void CreateInOrder(pBiNode root){pBiNode preNULL;if(root!NULL){InOrder(root,pre);pre-rightNULL;pre-RTag1;}
}//获取头指针
pBiNode FirstNode(pBiNode root){while (root-LTag!1){rootroot-left;}return root;
}
//获取下一个节点
pBiNode NextNode(pBiNode root){if (root-RTag!1){return FirstNode(root-right);}else{return root-right;}
}
//遍历线索
void InOrder(pBiNode root){for (pBiNode pFirstNode(root);p!NULL;pNextNode(p)){printf(%d ,p-data);}
}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);CreateInOrder(root);printf(\n线索二叉树中序);InOrder(root);printf(\n);ClearBiTree(root);} 4.测试结果 前序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
线索二叉树中序30 40 45 50 55 60 61 100 150 200 250 300 400 转载于:https://www.cnblogs.com/whzhaochao/p/5023492.html