码迷,mamicode.com
首页 > 其他好文 > 详细

二叉搜索树的创建 && 查找 & 插入 & 删除

时间:2015-01-19 10:52:53      阅读:121      评论:0      收藏:0      [点我收藏+]

标签:

二叉搜索树的删除:

在删除之前需要从树中查找到这个节点,然后再针对情况来判断如何删除。

分为三种情况,首先是此节点没有孩子节点,此节点有一个孩子节点,此节点有两个孩子节点

void Delete(BinTree*& root,int value)
{
	BinTree* delnode= NULL;
	if(root == NULL)
		return ;
	BinTree* temp = root;
	BinTree* parent =NULL;
	while(temp!=NULL)
	{
		if(temp->value == value)
			break;
		else
		{
			parent = temp;
			if(temp->value >value)
				temp = temp->left;
			else
				temp =temp->right; 
		}
		
	}
	if(temp ==NULL)
		return ;
	delnode = temp;
	// 删除的节点被找到 根据被删除的节点的情况来判断
	// 如果节点的没有孩子 那么直接删除此节点 
	if(delnode->right ==NULL && delnode->left ==NULL)
	{
		cout<<"==="<<endl;
		//cout<<parent->value<<endl;
		if(delnode == root)
		{
			root=NULL;
		}
		if(parent && parent->left == delnode)
		{
			parent->left = NULL;			 
		}			
		if(parent && parent->right == delnode)
			parent->right =NULL;
		delete delnode;
	} 
	//如果此节点有一个孩子
	if(delnode->right != NULL && delnode->left==NULL)
	{
		if(parent !=NULL)
		{
			if(parent->left == delnode)
				parent->left = delnode->right;
			else if(parent->right == delnode)
				parent->right = delnode->right;
			
		}
		else
		{
			root = delnode->right;
		}
		delete delnode;
		
	} 
	if(delnode->left !=NULL&&delnode->right== NULL)
	{
		if(parent !=NULL)
		{
			if(parent->left == delnode)
				parent->left = delnode->left;
			else if(parent->right = delnode)
				parent->right = delnode->right;
		}
		else
		{
			root = delnode->left;
		}
		delete delnode;
	}
	//两个节点都不为空 
	if(delnode->left !=NULL && delnode->right !=NULL)
	{
		temp = delnode->right;
		parent = delnode;
		while(temp->left !=NULL)
		{
			parent = temp;
			temp = temp->left;
		}
		delnode->value = temp->value;
		parent->left = temp->right;
		delete temp;
		//Delete(delnode->right,temp->value); 
	} 
} 


二叉搜索树的创建 && 查找 & 插入 & 删除

标签:

原文地址:http://blog.csdn.net/yusiguyuan/article/details/42870445

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!