二叉排序树的删除

#include "stdafx.h"
#include<cstdio>
#include<iostream>
#include<vector>
#include<stack>
#include<queue>

using namespace std;
const int maxn=100;
const int inf=0x7fffffff;
struct node{
	int data;
	node *l,*r;};

	node* findmax(node* root)
	{
		while(root->r!=NULL)
			root=root->r;
		return root;


	}
	node *findmin(node* root){
		while(root->l!=NULL)root=root->l;
		return root;


	}

	void deletenode(node* &root,int x){
		if(root==NULL)return ;
		if(root->data==x){
			if(root->l==NULL&&root->r==NULL)root=NULL;
			else if(root->l!=NULL){
				node* pre=findmax(root->l);
				root->data=pre->data;
				deletenode(root->l,pre->data);

			}
			else {
				node* pre=findmin(root->r);
				root->data=pre->data;
				deletenode(root->r,pre->data);


			}	





		}
		else if(root->data>x)deletenode(root->l,x);
		else deletenode(root->r,x);




	}



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值