二叉查找树
什么是二叉查找树?
- 是树的一种,即度为2的树。简单点说就是,每个节点至多只有两个子节点(也就是说存在0、1、2个结点);
- 描述的是一种一对多的关系,可由一个根节点衍生出一棵左子树,一棵右子树,每一棵子树又可以看成一一个根节点发散的树;
节点
据此我们可以定义树的基本单元为一个节点包含:Data域和指针域(两个指针,一个指向节点,一个指向右节点)
typedef struct _node{
ElemType item; //抽象高级数据类型,可用结构自定义
struct _node * left;
struct _node * right;
}Node;
二叉树
有了定义的基本二叉节点类型,我们可以开始定义我们的二叉树类型,树中包含:二叉树根节点指针和当前树节点数量size(增加这个size的目的是为了后续的操作可以更方便);
typedef struct _BinaryTree{
Node * root;
int size;
}BinaryTree;
接口以及实现
一、初始化
//将树初始化为空树
void InitializeTree(BinaryTree * bt)
{
bt->root = NULL;
size = 0;
}
二、是否为空
//判断是否是一棵空树
bool TreeIsEmpty(const BinaryTree * bt)
{
return size == 0;
}
三、是否已满
//假设我们已经定义了树的节点上限为MAXSIZE
#define MAXSIZE 20
bool TreeIsFull(const BinaryTree * bt)
{
return size == MAXSIZE;
}
四、返回当前树节点数量
int TreeCount(const BinaryTree * bt)
{
return bt->size;
}
五、添加节点(非递归)
static CopyToNode