二叉搜索树,也称有序二叉树,排序二叉树,是指一棵空树或者具有下列性质的二叉树:
若任意节点的左子树不空,则左子树上所有结点的值均小于它的根结点的值;
若任意节点的右子树不空,则右子树上所有结点的值均大于它的根结点的值;
任意节点的左、右子树也分别为二叉查找树。
没有键值相等的节点。
今天我使用搜索二叉树来实现一个简单的英汉互译的小字典
首先需要把英文插入二叉树结构,根据每个数据的ASSIC值不同来判断当前插入节点的位置,从第一个字母开始比较,比当前ASSIC值小的单词往左插,比它大的往右插
结构体的定义
typedef struct BSTreeNode
{
struct BSTreeNode* _left;
struct BSTreeNode* _right;
KeyType _key;//英文单词
ValueType _value;//对应的中文
}BSTreeNode;
建立新的节点给他赋值
BSTreeNode* BuyBSTreeNode(KeyType key, ValueType value)
{
BSTreeNode*newnode = (BSTreeNode*)malloc(sizeof(BSTreeNode));
newnode->_left = NULL;
newnode->_right = NULL;
newnode->_key = key;
newnode->_value = value;
return newnode;
}
插入一个节点
当插入时树为空树,直接创建一个节点
当树不为空时,创建一个节点判断这个节点的位置,插入这个节点
int BSTreeInsertR(BSTreeNode** tree, KeyType key, ValueType value)
{
assert(value);
if (*tree == NULL)//当树为空树时
{
BSTreeNode*newnode = BuyBSTreeNode(key, value);
*tree = newnode;
}
else
{
BSTreeNode*newnode = BuyBSTreeNode(key, value);
BSTreeNode*parent =*tree;//定义父亲节点便于插入节点
BSTreeNode*child = *tree;//孩子节点找到节点插入位置
char *cur = child->_key;//指针比较单词该插入的位置
char