linux tree c语言实现,树(C语言实现,基于链式结构)

树(C语言实现,基于链式结构)

Tree.h文件

/**

* 树(C语言实现,基于链式结构)

* 该树为二叉树

* 指定数据类型为字符型

*/

#define TRUE 1

#define FALSE 0

#define OK 1

#define ERROR 0

typedef int Status;

typedef int bool;

typedef char ElemType;

//定义树节点的结构

typedef struct TreeNode{

ElemType data;

struct TreeNode *leftchild, *rightchild;

}TreeNode;

//定义树的结构

typedef struct TreeNode* Tree;

/*

* 初始化树

*/

Tree InitTree(Tree t);

/*

* 创建树按照给定的规则

*/

void CreateTree(Tree* t, char* s);

/*

* 销毁树

*/

void DestroyTree(Tree t);

/*

* 清空树

*/

void ClearTree(Tree t);

/*

* 判断树是否为空

*/

bool TreeEmpty(Tree t);

/*

*

*/

int TreeDepth();

/*

*

*/

void Root();

/*

*

*/

void Value();

/*

*

*/

void Assign();

/*

*

*/

void Parent();

/*

*

*/

void LeftChild();

/*

*

*/

void RightChild();

/*

*

*/

void InsertChild();

/*

*

*/

void DeleteChild();

/*

* 前序遍历树

*/

void PreOrderTraverse(Tree t);

/*

* 中序遍历树

*/

void InOrderTraverse(Tree t);

/*

* 后序遍历树

*/

void PostOrderTraverse(Tree t);

/*

* 层次遍历树

*/

void LevelOrderTraverse(Tree t);

Tree.c文件

#include

#include

#include "Tree.h"

int i = 0;

int tree_depth_num;

Tree InitTree(Tree t)

{

return t = NULL;

}

void CreateTree(Tree* t, char* s)  //该处的Tree*是TreeNode指针的指针,用于操作指针变量的值

{

//使用前序遍历方式创建树

char ch = s[i];

i++;

if(ch == '#')

*t = NULL;

else{

*t = (TreeNode*)malloc(sizeof(TreeNode));

(*t)->data = ch;

CreateTree(&(*t)->leftchild, s);

CreateTree(&(*t)->rightchild, s);

}

}

void DestroyTree(Tree t)

{

if(t == NULL)

return;

ClearTree(t->leftchild);

ClearTree(t->rightchild);

free(t);

}

void ClearTree(Tree t)

{

if(t == NULL)

return;

t->data = ' ';

ClearTree(t->leftchild);

ClearTree(t->rightchild);

}

bool TreeEmpty(Tree t)

{

if(t == NULL)

return TRUE;

else

return FALSE;

}

void ProOrderTraverse(Tree t)

{

if(t == NULL)

return;

printf("%c\n", t->data);

ProOrderTraverse(t->leftchild);

ProOrderTraverse(t->rightchild);

}

void InOrderTraverse(Tree t)

{

if(t == NULL)

return;

InOrderTraverse(t->leftchild);

printf("%c\n",t->data);

InOrderTraverse(t->rightchild);

}

void PostOrderTraverse(Tree t)

{

if(t == NULL)

return;

PostOrderTraverse(t->leftchild);

PostOrderTraverse(t->rightchild);

printf("%c\n",t->data);

}

void LevelOrderTraverse(Tree t)

{

//要用到队列

}

int main()

{

Tree t = InitTree(t);

CreateTree(&t,"AB#D##C##");//AB#D##C## //ABDG##H###CE#I##F##

ProOrderTraverse(t);

ClearTree(t);

ProOrderTraverse(t);

}

将C语言梳理一下,分布在以下10个章节中:

0b1331709591d260c1c78e86d0c51c18.png

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值