面试经典(25)--二叉查找树(搜索树)

本文详细介绍了二叉搜索树的基本概念,并深入探讨了其插入和删除算法的具体实现过程。对于插入操作,通过查找合适的位置并调整节点关系完成。而对于删除操作,则需要考虑节点的孩子节点数量,采取不同策略确保树的性质不变。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二叉搜索树是经典的数据结构,本文来总结一下二叉搜索树的插入和删除算法。

插入算法:

struct Node
{
	int key;
	struct Node *parent;
	struct Node *left;
	struct Node *right;
};

struct Node* tree_insert(struct Node *root,struct Node *newNode)
{
	struct Node *y=NULL;
	struct Node *x=root;

	while(x!=NULL)
	{
		y=x;
		if(newNode->key<x->key)
			x=x->left;
		else
			x=x->right;
	}
	newNode->parent=y;
	if(y==NULL)
		root=newNode;
	else
	{
		if(newNode->key<y->key)
			y->left=newNode;
		else
			y->right=newNode;
	}
	return root;
}
主要思想:找到插入点的父节点y,然后进行插入。

删除算法:如果被删除节点z有俩个孩子,那么直接删除后继;否则直接删除z

struct Node* tree_delete(struct Node* &root,struct Node *z)
{
	struct Node *x,*y;
    if(z->left==NULL || z->right==NULL)
	    y=z;
	else
		y=tree_successor(z);
	if(y->left!=NULL)
		x=y->left;
	else
		x=y->right;
	if(x!=NULL)
	    x->parent=y->parent;
	if(y->parent==NULL)
		root=x;
	else if(y==y->parent->left)
		y->parent->left=x;
	else
		y->parent->right=x;
	if(y!=z)
		z->key=y->key;
	return y;
}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值