mirror of
https://github.com/by777/dataStructureForC.git
synced 2026-02-03 01:53:15 +08:00
修改
This commit is contained in:
@@ -1,213 +0,0 @@
|
||||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
#include "stdlib.h"
|
||||
#include "io.h"
|
||||
#include "math.h"
|
||||
#include "time.h"
|
||||
|
||||
#define OK 1
|
||||
#define ERROR 0
|
||||
#define TRUE 1
|
||||
#define FALSE 0
|
||||
#define OVERFLOW -1
|
||||
#define MAXSIZE 100 /* 存储空间初始分配量 */
|
||||
|
||||
typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 */
|
||||
|
||||
/* 用于构造二叉树********************************** */
|
||||
int index=1;
|
||||
typedef char String[24]; /* 0号单元存放串的长度 */
|
||||
String str;
|
||||
|
||||
Status StrAssign(String T,char *chars)
|
||||
{
|
||||
int i;
|
||||
if(strlen(chars)>MAXSIZE)
|
||||
return ERROR;
|
||||
else
|
||||
{
|
||||
T[0]=strlen(chars);
|
||||
for(i=1;i<=T[0];i++)
|
||||
T[i]=*(chars+i-1);
|
||||
return OK;
|
||||
}
|
||||
}
|
||||
/* ************************************************ */
|
||||
|
||||
typedef char TElemType;
|
||||
TElemType Nil=' '; /* 字符型以空格符为空 */
|
||||
|
||||
Status visit(TElemType e)
|
||||
{
|
||||
printf("%c ",e);
|
||||
return OK;
|
||||
}
|
||||
|
||||
typedef struct BiTNode /* 结点结构 */
|
||||
{
|
||||
TElemType data; /* 结点数据 */
|
||||
struct BiTNode *lchild,*rchild; /* 左右孩子指针 */
|
||||
}BiTNode,*BiTree;
|
||||
|
||||
|
||||
/* 构造空二叉树T */
|
||||
Status InitBiTree(BiTree *T)
|
||||
{
|
||||
*T=NULL;
|
||||
return OK;
|
||||
}
|
||||
|
||||
/* 初始条件: 二叉树T存在。操作结果: 销毁二叉树T */
|
||||
void DestroyBiTree(BiTree *T)
|
||||
{
|
||||
if(*T)
|
||||
{
|
||||
if((*T)->lchild) /* 有左孩子 */
|
||||
DestroyBiTree(&(*T)->lchild); /* 销毁左孩子子树 */
|
||||
if((*T)->rchild) /* 有右孩子 */
|
||||
DestroyBiTree(&(*T)->rchild); /* 销毁右孩子子树 */
|
||||
free(*T); /* 释放根结点 */
|
||||
*T=NULL; /* 空指针赋0 */
|
||||
}
|
||||
}
|
||||
|
||||
#define ClearBiTree DestroyBiTree
|
||||
|
||||
/* 按前序输入二叉树中结点的值(一个字符) */
|
||||
/* #表示空树,构造二叉链表表示二叉树T。 */
|
||||
void CreateBiTree(BiTree *T)
|
||||
{
|
||||
TElemType ch;
|
||||
|
||||
/* scanf("%c",&ch); */
|
||||
ch=str[index++];
|
||||
|
||||
if(ch=='#')
|
||||
*T=NULL;
|
||||
else
|
||||
{
|
||||
*T=(BiTree)malloc(sizeof(BiTNode));
|
||||
if(!*T)
|
||||
exit(OVERFLOW);
|
||||
(*T)->data=ch; /* 生成根结点 */
|
||||
CreateBiTree(&(*T)->lchild); /* 构造左子树 */
|
||||
CreateBiTree(&(*T)->rchild); /* 构造右子树 */
|
||||
}
|
||||
}
|
||||
|
||||
/* 初始条件: 二叉树T存在 */
|
||||
/* 操作结果: 若T为空二叉树,则返回TRUE,否则FALSE */
|
||||
Status BiTreeEmpty(BiTree T)
|
||||
{
|
||||
if(T)
|
||||
return FALSE;
|
||||
else
|
||||
return TRUE;
|
||||
}
|
||||
|
||||
|
||||
|
||||
/* 初始条件: 二叉树T存在。操作结果: 返回T的深度 */
|
||||
int 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;
|
||||
}
|
||||
|
||||
/* 初始条件: 二叉树T存在。操作结果: 返回T的根 */
|
||||
TElemType Root(BiTree T)
|
||||
{
|
||||
if(BiTreeEmpty(T))
|
||||
return Nil;
|
||||
else
|
||||
return T->data;
|
||||
}
|
||||
|
||||
/* 初始条件: 二叉树T存在,p指向T中某个结点 */
|
||||
/* 操作结果: 返回p所指结点的值 */
|
||||
TElemType Value(BiTree p)
|
||||
{
|
||||
return p->data;
|
||||
}
|
||||
|
||||
/* 给p所指结点赋值为value */
|
||||
void Assign(BiTree p,TElemType value)
|
||||
{
|
||||
p->data=value;
|
||||
}
|
||||
|
||||
/* 初始条件: 二叉树T存在 */
|
||||
/* 操作结果: 前序递归遍历T */
|
||||
void PreOrderTraverse(BiTree T)
|
||||
{
|
||||
if(T==NULL)
|
||||
return;
|
||||
printf("%c",T->data);/* 显示结点数据,可以更改为其它对结点操作 */
|
||||
PreOrderTraverse(T->lchild); /* 再先序遍历左子树 */
|
||||
PreOrderTraverse(T->rchild); /* 最后先序遍历右子树 */
|
||||
}
|
||||
|
||||
/* 初始条件: 二叉树T存在 */
|
||||
/* 操作结果: 中序递归遍历T */
|
||||
void InOrderTraverse(BiTree T)
|
||||
{
|
||||
if(T==NULL)
|
||||
return;
|
||||
InOrderTraverse(T->lchild); /* 中序遍历左子树 */
|
||||
printf("%c",T->data);/* 显示结点数据,可以更改为其它对结点操作 */
|
||||
InOrderTraverse(T->rchild); /* 最后中序遍历右子树 */
|
||||
}
|
||||
|
||||
/* 初始条件: 二叉树T存在 */
|
||||
/* 操作结果: 后序递归遍历T */
|
||||
void PostOrderTraverse(BiTree T)
|
||||
{
|
||||
if(T==NULL)
|
||||
return;
|
||||
PostOrderTraverse(T->lchild); /* 先后序遍历左子树 */
|
||||
PostOrderTraverse(T->rchild); /* 再后序遍历右子树 */
|
||||
printf("%c",T->data);/* 显示结点数据,可以更改为其它对结点操作 */
|
||||
}
|
||||
|
||||
|
||||
int main()
|
||||
{
|
||||
int i;
|
||||
BiTree T;
|
||||
TElemType e1;
|
||||
InitBiTree(&T);
|
||||
|
||||
|
||||
StrAssign(str,"ABDH#K###E##CFI###G#J##");
|
||||
|
||||
CreateBiTree(&T);
|
||||
|
||||
printf("构造空二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T));
|
||||
e1=Root(T);
|
||||
printf("二叉树的根为: %c\n",e1);
|
||||
|
||||
printf("\n前序遍历二叉树:");
|
||||
PreOrderTraverse(T);
|
||||
printf("\n中序遍历二叉树:");
|
||||
InOrderTraverse(T);
|
||||
printf("\n后序遍历二叉树:");
|
||||
PostOrderTraverse(T);
|
||||
ClearBiTree(&T);
|
||||
printf("\n清除二叉树后,树空否?%d(1:是 0:否) 树的深度=%d\n",BiTreeEmpty(T),BiTreeDepth(T));
|
||||
i=Root(T);
|
||||
if(!i)
|
||||
printf("树空,无根\n");
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@
|
||||
* @Author: Xu Bai
|
||||
* @Date: 2019-07-13 22:24:04
|
||||
* @LastEditors: Xu Bai
|
||||
* @LastEditTime: 2019-07-19 22:42:49
|
||||
* @LastEditTime: 2019-07-19 22:49:14
|
||||
*/
|
||||
#include "string.h"
|
||||
#include "stdio.h"
|
||||
@@ -65,17 +65,17 @@ Status InitBiTree(BiTree *T)
|
||||
return OK;
|
||||
}
|
||||
|
||||
void DestroyTree(BiTree *T)
|
||||
void DestroyBiTree(BiTree *T)
|
||||
{
|
||||
if (*T)
|
||||
{
|
||||
if ((*T)->lchild)
|
||||
{
|
||||
DestroyTree(&(*T)->lchild);
|
||||
DestroyBiTree(&(*T)->lchild);
|
||||
}
|
||||
if ((*T)->rchild)
|
||||
{
|
||||
DestroyTree(&(*T)->rchild);
|
||||
DestroyBiTree(&(*T)->rchild);
|
||||
}
|
||||
free(*T);
|
||||
*T = NULL;
|
||||
|
||||
Reference in New Issue
Block a user