二叉树的链式存储结构-二叉链表

来源:互联网 发布:php成绩管理系统源码 编辑:程序博客网 时间:2024/05/18 13:44

二叉树的链式存储结构-二叉链表

在此只附上头文件:

代码已经在资源中共享:

地址为:http://download.csdn.net/detail/ta893115871/4751186

头文件为:

/* * tree.h * *  Created on: 2012-10-31 *      Author: china *      QQ:893115871 * *      二叉树使用链表能避免顺序储存浪费空间的问题,算法和结构相对简单,但使用二叉链表, *      由于缺乏父链的指引,在找回父节点时需要重新扫描树得知父节点的节点地址。 */#ifndef TREE_H_#define TREE_H_#include <stdio.h>#include <stdlib.h>//for malloc()#include <math.h>//for OVERFLOW其值为3#define  OK 1#define  ERROR 0#define  Nil  '#'//表示空结点#define  ROOT  -1#define  SIBLING  2typedef int Status; /* Status是函数的类型,其值是函数结果状态代码,如OK等 *//* 二叉树的二叉链表存储表示 */typedef char DataType;typedef struct TNode {DataType data; //结点所存储的数据struct TNode* lchild, *rchild;/* 左右孩子指針 */} BiTNode, *BiTree;//------------队列的定义和基本操作的声明,用于层次遍历二叉树--------------------------------typedef BiTree QElemType;//队列元素为指针typedef struct SNode {QElemType data;struct SNode* next;} QNode, *LinkList;typedef struct {LinkList front; //队首结点(即删除点)LinkList rear; //队尾结点(即插入点)} LinkQueue;int creat_empty_linkqueue(LinkQueue*);int linkqueue_empty(const LinkQueue*);int linkqueue_length(const LinkQueue*);int linkqueue_get_top_element(const LinkQueue*, QElemType*);int linkqueue_enter(LinkQueue*, QElemType);int linkqueue_delete(LinkQueue*, QElemType*);void linkqueue_clear(LinkQueue *);void DestroyQueue(LinkQueue*);//---------------end  queue-----------------------------BiTree create_bitree(); //创建一个二叉树Status empty_bitree(const BiTree); //判空//visitvoid  visit_func_bitree(DataType);//输出结点元素void pre_order_bitree(const BiTree,void(*visit)(DataType)); //先序遍历二叉树void in_order_bitree(const BiTree,void(*visit)(DataType)); //中序遍历二叉树void post_order_bitree(const BiTree,void(*visit)(DataType)); //后序遍历二叉树void level_order_bitree(const BiTree,void(*visit)(DataType)); //层次遍历二叉树void level_order_bitree_queue(const BiTree,void(*visit)(DataType)); //层次遍历二叉树void pre_orderlists_bitree(const BiTree,void(*visit)(DataType));//广义表输出二叉树//end visitStatus destroy_bitree(BiTree); //销毁二叉树#define  clear_bitree destroy_bitree//在二叉树中清空和销毁是一样的int depth_bitree(const BiTree); //求二叉树的深度int depth_bitree2(const BiTree); //求二叉树的深度Status get_rootdata(const BiTree, DataType*); //获取根结点的数据Status get_parent_bitree(const BiTree, DataType*, DataType); //获取双亲结点Status get_leftchild_bitree(const BiTree, DataType*, DataType); //获取结点的左孩子Status get_rightchild_bitree(const BiTree, DataType*, DataType); //获取某个结点的右孩子Status get_leftsibling_bitree(const BiTree, DataType*, DataType); //获取结点的左兄弟Status get_rightsibling_bitree(const BiTree, DataType*, DataType); //获取结点的右兄弟Status assign_bitree(BiTree, DataType, DataType); //更改某节点的值int get_nums_bitree(const BiTree); //返回二叉树的结点数int get_leafnums_bitree(const BiTree); //返回二叉树的叶子数Status get_node_bitree(const BiTree, DataType*, int); //按先序获取第index个节点Status search_node_bitree(const BiTree, DataType); //查看树中是否含有某个结点void exchange_bitree(BiTree); //交换左右子树void delete_bitree(BiTree, DataType, int); //删除子树void insert_bitree(BiTree, DataType, int, const BiTree); //插入子树#endif /* TREE_H_ */


 

原创粉丝点击