二叉查找树的简单实现

二叉查找树的简单实现

笔记(2018-11-25)
#include <iostream>
#include <cstdlib>
#include <ctime>
using namespace std;

struct node{
    int value;
    node *left,*right;
    node(const int &x,node *lt=NULL,node *rg=NULL)
    :value(x),left(lt),right(rg){}
};
node *root=NULL;
void insert(const int &x,node *&t){
    if(t==NULL) {t=new node(x);return;}
    if(x<t->value) insert(x,t->left);
    else insert(x,t->right);
}
void remove(const int &x,node *&t){
    if(t==NULL) return;
    if(x<t->value) remove(x,t->left);
    else if(x>t->value) remove(x,t->right);
    else if(t->left!=NULL&&t->right!=NULL){
        node *tmp=t->right;
        while(tmp->left!=NULL)tmp=tmp->left;
        t->value=tmp->value;
        remove(tmp->value,t->right);
    }
    else{
        node *oldtmp=t;
        t=(t->left!=NULL)?t->left:t->right;
        delete oldtmp;
    }
}
node *find(const int &x,node *t){
    if(t==NULL) return t;
    if(t->value==x) return t;
    else if(t->value>x) return find(x,t->left);
    else return find(x,t->right);
}
void preOrder(node *t){
    if(t==NULL) return;
    preOrder(t->left);
    cout<<t->value<<" ";
    preOrder(t->right);
}
void makeEmpty(node *&t){
    if(t==NULL) return;
    makeEmpty(t->left);
    makeEmpty(t->right);
    delete t;
}
int main(){
    int num;
    srand(time(NULL));
    for(int k=0;k<8;++k){
        num=rand()%10;
        insert(num,root);
    }
    preOrder(root);
    cout<<endl;
    node *tmp=find(4,root);
    if(tmp!=NULL){
        cout<<tmp->value<<endl;
        remove(4,root);
    }
    else cout<<endl;
    preOrder(root);
    return 0;
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值