数据结构之通用树(孩子兄弟表示法)

孩子兄弟表示法模型,每个结点都有一个指向其第一个孩子的指针,每个结点都有一个指向其第一个右兄弟的指针 。

头文件:

tree.h

#ifndef __TREE_H__
#define __TREE_H__

#include "error.h"
#define CHILD 1
#define BROTHER 0 

typedef int TreeData;

//树节点类型
typedef struct _treenode
{
	TreeData data;              //数据域
	struct _treenode *child;      //指向首孩子的指针
	struct _treenode *brother;      //指向右兄弟的指针
}TreeNode;

//树类型
typedef struct _tree
{
	int len;                 //树节点的个数(不算头节点)
	TreeNode *head;             //指向头节点的指针
}Tree;

//该树的根节点是头节点的首孩子

//创建树
Tree *Create_tree ();

// pos 代表要插入结点的前一个节点怎么走,首孩子为1,兄弟为0,如01为先首孩子,后兄弟
//count表示步数,从头节点(根节点的前一个节点)开始走。
// 约定:
// 新插入的节点只能作为前一个节点的首孩子或兄弟
//flag表示是作为前一个节点的的首孩子还是兄弟
int Insert_Tree(Tree *tree, TreeData data, int pos, int count, int flag);

//打印树
void Display(Tree *tree);

//删除节点
// pos 代表要删除结点怎么走,首孩子为1,兄弟为0,如01为先首孩子,后兄弟
//count表示步数,从头节点(根节点的前一个节点)开始走。
int Delete(Tree *tree, int pos, int count, TreeData *x);

//求指定位置树节点的值
// pos 代表要删除结点怎么走,首孩子为1,兄弟为0,如01为先首孩子,后兄弟
//count表示步数,从头节点(根节点的前一个节点)开始走。
int Tree_Get(Tree *tree, int pos, int count, TreeData *x);

// 清空树中所有的节点
int Tree_Clear(Tree* tree);

// 树的销毁 
void Tree_Destroy(Tree* tree);

//获取树根节点的地址
TreeNode* Tree_Root(Tree* tree);

//求树节点个数
int Tree_Count(Tree* tree);

//求树的高度
int Tree_Height(Tree* tree);

//求树的度
int Tree_Degree(Tree* tree);



#endif   //__TREE_H__ 





源文件:

tree.c

<

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值