二叉排序树BST的定义及其增删改查操作(C语言)
Posted bfhonor
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了二叉排序树BST的定义及其增删改查操作(C语言)相关的知识,希望对你有一定的参考价值。
一、二叉排序树BST
(一)二叉排序树的定义
- 二叉排序树可用于元素的有序组织、搜索.
- 二叉排序树,又称二叉查找树(BST,Binary Search Tree)
(二)查找操作
- 非递归实现:
//二叉排序树结点
typedef struct BSTNode{
int key;
struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;
//在二叉排序树中查找值为key的结点
BSTNode *BST_Search(BSTree T, int key){
while(T != NULL && key != T->key){//若树空或等于结点值,则结束循环
if(key < T->key) T=T->lchild; //小于,则在左子树上查找
else T=T->rchild; //大于,则在右子树上查找
}
return T;
}
- 递归实现:
//二叉排序树结点
typedef struct BSTNode{
int key;
struct BSTNode *lchild,*rchild;
}BSTNode,*BSTree;
//在二叉排序树中查找为key的结点(递归实现)
BSTNode *BSTSearch(BSTree T, int key){
if(T == NULL)
return NULL; //查找失败
if(key == T->key)
return T; //查找成功
else if(key < T->key)
return BSTSearch(T -> lchild, key); //在左子树中找
else
return BSTSearch(T -> rchild, key); //在右子树中找
}
(三)插入操作
1. 二叉排序树的构造
(四)删除操作
- 先搜索找到目标结点:
① 若被删除结点z是叶结点,则直接删除,不会破坏二叉排序树的性质。
- ② 若结点z只有一棵左子树或右子树,则让z的子树成为z父结点的子树,替代z的位置。
- ③ 若结点z有左、右两棵子树,则令z的直接后继替代z,然后从二叉排序树中删去这个直接后继,这样就转换成了第一种情况。
- ③ 若结点z有左、右两棵子树,则令z的直接前驱替代z,然后从二叉排序树中删去这个直接前驱,这样就转换成了第二种情况。
(五)查找效率分析
以上是关于二叉排序树BST的定义及其增删改查操作(C语言)的主要内容,如果未能解决你的问题,请参考以下文章