#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);
}
二叉排序树的删除
最新推荐文章于 2022-03-28 16:13:26 发布