二叉树 c 实现

来源:互联网 发布:电脑打不开软件没反应 编辑:程序博客网 时间:2024/05/21 07:26
/* binaryTreeMain.c */// #define CHAR#include "ds.h"#ifdef CHAR  typedef char TElemType;  TElemType Nil=' ';#endif#ifdef INT  typedef int TElemType;  TElemType Nil=0;#endif#include "binaryTree.h"#include "binaryTree.c"int main(){  // declare a pointer, not initialized, might be 0x0 of random  BiTree T, p, c;  InitBiTree(&T);  CreateBiTree(&T);  PreOrderTraverse(T, visit);  return OK;}
/* binaryTree.c *//* Used as a parameter in traverse to print an element*/Status visit(TElemType e){#ifdef CHAR  printf("%c ", e);#endif#ifdef INT  printf("%d ", e);#endif  return OK;}// Initial empty binary treeStatus InitBiTree(BiTree *T){  *T = NULL;  return OK;}/* Create binary tree Order of creat: node, left child, right child, which are inorder if data type is char, ' ' means stop if int, 0 means stop*/Status CreateBiTree(BiTree *T){  TElemType data;#ifdef CHAR  scanf("%c", &data);#endif#ifdef INT  scanf("%d", &data);#endif  if(data == Nil)    *T = NULL;  else{    *T = (BiTree)malloc(sizeof(BiTNode));    if(!*T)      exit(OVERFLOW);    (*T)->data = data;    CreateBiTree(&(*T)->lchild);    CreateBiTree(&(*T)->rchild);  }  return OK;}/* Destroy binary tree free memory allocated for tree*/void DestroyBiTree(BiTree *T){  if(*T){    if((*T)->lchild)      DestroyBiTree(&(*T)->lchild);    if((*T)->rchild)      DestroyBiTree(&(*T)->rchild);    free(*T);    *T = NULL;  }}// PreOrder traversevoid PreOrderTraverse(BiTree T, Status(*Visit)(TElemType e)){  if(T){    Visit(T->data);    PreOrderTraverse(T->lchild, Visit);    PreOrderTraverse(T->rchild, Visit);  }}void InOrderTraverse(BiTree T, Status(*Visit)(TElemType e)){  if(T){    InOrderTraverse(T->lchild, Visit);    Visit(T->data);    InOrderTraverse(T->rchild, Visit);  }}// Return deep of binary treeint BiTreeDepth(BiTree T){  int i, j;  if(!T)    return 0;  if(T->lchild)    i = BiTreeDepth(T->lchild);  else    i = 0;  if(T->rchild)    j = BiTreeDepth(T->rchild);  else    j = 0;  return i > j?i + 1: j + 1;}
/* Binary tree: linked list representation */typedef struct BiTNode{  TElemType data;  struct BiTNode *lchild, *rchild;}BiTNode, *BiTree;// Initial empty binary treeStatus InitBiTree(BiTree *T);// Create binary treeStatus CreateBiTree(BiTree *T);// Return Left childTElemType LeftChild(BiTree T, TElemType e);// PreOrder traversevoid PreOrderTraverse(BiTree T, Status(*Visit)(TElemType e));// InOrder traversevoid InOrderTraverse(BiTree T, Status(*Visit)(TElemType e));// Return deep of binary treeint BiTreeDepth(BiTree T);
/* ds.h *//* Some pre define */#include <string.h>#include <ctype.h>#include <sys/malloc.h>#include <stdio.h>#include <stdlib.h>/* State code */#define TURE 1#define FALSE 0#define OK 1#define ERROR 0#define INFEASIBLE -1#define OVERFLOW 0typedef int Status;typedef int Boolean;
原创粉丝点击