孩子兄弟表示法模型,每个结点都有一个指向其第一个孩子的指针,每个结点都有一个指向其第一个右兄弟的指针 。
头文件:
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
<