树是一种非线性的数据结构,可以使用链表组织树的各个节点,描述树的一些常用操作。双亲孩子表示法是指每个结点都有一个指向其双亲的指针,每个结点都有若干个指向其孩子的指针。
头文件:
tree.h
#ifndef __TREE_H__
#define __TREE_H__
#include "error.h"
struct _treeNode; //事先声明
//孩子节点链表的类型
typedef struct _childNode
{
struct _treeNode *childNode; //指向树节点
struct _childNode *next; //指向孩子节点链表的下一个元素
}ChildNode;
//树节点链表
typedef char TreeData;
typedef struct _treeNode
{
TreeData data; //数据域
struct _treeNode *parent; //指向父节点的指针
struct _treeNode *next; //指向树节点链表下一个节点
struct _childNode *childlist; //指向孩子节点链表头节点
int degree; //头节点
}TreeNode;
//树类型
typedef struct _tree
{
TreeNode *head; //指向树节点链表头节点的指针
int len; //树节点的个数
}Tree;
typedef void (*TreePrint)(TreeNode *node);
//创建一棵树
Tree *Create_tree ();
// pos 代表要插入结点父亲结点的位置
// 约定:
// 1 新插入的结点插入在当前父亲结点所有孩子的右边
// 2 根节点的位置是 0
int Insert_Tree(Tree *tree, TreeData data, int pos);
//打印树
void Display(Tree *tree, TreePrint pFunc);
//删除节点
int Delete(Tree *tree, int pos, TreeData *x);
//求指定位置树节点的值
int Tree_Get(Tree* tree, int pos, 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__