二叉排序树(BinarySortTree)的实现

来源:互联网 发布:网络编辑兼职在哪找 编辑:程序博客网 时间:2024/05/16 01:34


/*    Title : Binary Sort Tree    Author: nyist_xiaod    Date  : 2013.3.16*/#include <stdio.h>#include <string.h>#include <algorithm>using namespace std;#define BSTdef#define Pnn pair<Node*,Node*>#ifdef BSTdef#define Pre(root,parent) (root==Root ? Root : (value < parent->value ? parent->lson : parent->rson))#endiftemplate<typename T>struct BST{    struct Node    {        T value;        Node *lson, *rson;        Node(const T& val):value(val),lson(NULL),rson(NULL){}    };    Node* Root;    /**********************************************/    BST():Root(NULL){}    bool empty()    {        return Root == NULL;    }    void clear(Node* root)    {        if(root == NULL)            return ;        clear(root->lson);        clear(root->rson);        delete root;        root = NULL;    }    Node* least(Node* root)    {        return root->lson ? least(root->lson) : root;    }    Node* most(Node* root)    {        return root->rson ? most(root->rson) : root;    }    Pnn search(const T& value)    {        Node *root = Root , *parent = NULL;        while(root)        {            if(value == root->value)                return make_pair(root,parent);            parent = root;            root = value < parent->value ? parent->lson : parent->rson;        }        return make_pair(root,parent);    }    bool insert(const T& value)    {        Pnn p = search(value);        Node *root = p.first , *parent = p.second;        if(root != NULL)            return false;        Pre(root,parent) = new Node(value);        return true;    }    void erase(const T& value)    {        Pnn p = search(value);        Node *root = p.first , *parent = p.second;        if(root->lson == NULL)            Pre(root,parent) = root->rson;        else            if(root->rson == NULL)                Pre(root,parent) = root->lson;            else            {                Node *lmost = root->lson, *lparent = root;                while(lmost->rson)                {                    lparent = lmost;                    lmost = lmost->rson;                }                (lmost->value < lparent->value ? lparent->lson : lparent->rson) = lmost->lson;                lmost->lson = root->lson , lmost->rson = root->rson;                Pre(root,parent) = lmost;            }        delete root;    }};


原创粉丝点击