• tree


    #include <iostream>
    using namespace std;

    typedef int T;
    class bst
    {
    struct Node{
    T data;
    Node* left;
    Node* right;
    Node(const T& d):data(d),left(),right(){}
    ~Node(){cout<<"~Node"<<endl;}
    };
    Node* root;
    typedef Node* tree;
    int sz;

    void clear(tree& t){
    if(t==NULL) return;
    clear(t->left);
    clear(t->right);
    delete t;
    t=NULL;

    }
    void insert(Node* pn,tree& t){
    if(pn==NULL) return;
    if(t==NULL) t=pn;
    else
    {
    if(pn->data >= t->data)
    insert(pn,t->right);
    else
    insert(pn,t->left);
    }
    }
    void travel(tree& t){
    if(t==NULL) return;
    travel(t->left);
    cout<<t->data<<' ';
    travel(t->right);
    }

    tree& find(tree& t,const T& d){
    if(t==NULL) return t;
    if(t->data==d) return t;
    if(t->data<d) return find(t->right,d);
    return find(t->left,d);
    }
    int high(tree& t){
    if(t==NULL) return 0;
    int left=high(t->left);
    int right=high(t->right);
    return left>right?left+1:right+1;
    }
    public:
    bst():root(),sz(){}

    void clear(){
    clear(root);
    sz=0;
    }
    ~bst(){
    clear();
    sz=0;
    }
    void insert(const T& d){
    Node* pn=new Node(d);
    insert(pn,root);
    sz++;
    }
    void travel(){
    travel(root);
    cout<<endl;
    }
    //查找一个元素,返回bst::Node*&类型,如果找不到返回空
    tree& find(const T& d){
    find(root,d);
    }
    //删除一个元素
    bool remove(const T& d){
    tree& t=find(root,d);
    if(t==NULL) return false;
    insert(t->left,t->right);
    Node* p =t;
    t = t->right;
    delete p;
    sz--;
    return true;
    }
    void removeAll(const T& d){
    while(remove(d));

    }
    void update(const T& old,const T& newd){
    while(remove(old)) insert(newd);
    }
    int size(){
    return sz;
    }
    int hight()
    {
    high(root);
    }
    };

    int main()
    {
    bst t;
    t.insert(4);
    t.insert(3);
    t.insert(6);
    t.insert(9);
    cout<<t.hight()<<endl;
    t.travel();
    cout<<t.find(1)<<endl;
    t.remove(3);
    t.travel();
    t.update(4,5);
    t.insert(12);
    t.insert(34);
    t.insert(5);
    t.insert(6);
    t.insert(5);
    t.travel();
    t.removeAll(5);
    t.travel();
    cout<<t.size()<<endl;
    cout<<t.hight()<<endl;
    t.clear();

    }

  • 相关阅读:
    php中file_get_contents的图片乱码
    Lsh and Rsh (左移和右移)
    |=的含义
    Intercultural Communication Drama
    VS代码块快速折叠快捷键
    C++sqrt()函数与sqrtf()函数的区别
    C++中union和struct之间的区别
    泛型编程
    生成百度网盘目录文件
    字符串前L的含义
  • 原文地址:https://www.cnblogs.com/xiaomaogong/p/3040071.html
Copyright © 2020-2023  润新知