二叉排序树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语言)的主要内容,如果未能解决你的问题,请参考以下文章

二叉树增删改查 && 程序实现

C语言实现二叉查找树(BST)的基本操作

(王道408考研数据结构)第五章树-第四节1:二叉树排序树(BST)及其操作

二叉搜索树增删改查完整实现(C++)

二叉排序树(BST)的思路及C语言实现

c语言 建立一个链表,实现增删改查