BST_常用操作

推荐慕课网,刘宇波老师《算法与数据结构》
链接:http://coding.imooc.com/class/71.html
BST_常用操作 课堂笔记

#include <iostream>
using namespace std;

template<typename Key,typename Value>
class BST{  
private:
    struct Node{
        Key key;
        Value value;
        Node *left;
        Node *right;

        Node(Key key,Value value){
            this->key = key;
            this->value = value;
            this->left = this->right = NULL;
        }
    };
    Node *root;
    int count;

public:
    BST(){
        root = NULL;
        count = 0;
    }
    ~BST(){
        destroy();
    }
    int size(){
        return count;
    }
    bool isEmpty(){
        return count == 0;
    }
    void insert(Key key,Value value){
        root = insert(root,key,value);
    }
    bool contain(Key key){
        return contain(root,key);
    }
    Value* serach(Key key){
        return serach(root,key);
    }
    void preOrder(){
        preOrder(root);
    }
    void inOrder(){
        inOrder(root);
    }
    void postOrder(){
        postOrder(root);
    }

private:
    Node* insert(Node* node,Key key,Value value){
        if(node == NULL){
            count++;
            return new Node(key,value);
        }
        if(key == node->key)
            node->value = value;
        else if(key < node->key)
            node->left = insert(node->left,key,value);
        else
            node->right = insert(node->right,key,value);

        return node;
    }
    bool contain(Node* node,Key key){
        if(node == NULL)
            return false;
        if(key == node->key)
            return true;
        else if(key < node->key)
            return contian(node->left,key);
        else
            return contian(node->right,key);
    }
    Value* serach(Node* node,Key key){
        if(node == NULL)
            return NULL;
        if(key == node->key)
            return &(node->value);
        else if(key < node->value)
            return serach(node->left,key);
        else
            return serach(node->right,key);
    }
    void preOrder(Node* node){
        if(node != NULL){
            cout<<node->key<<endl;
            preOrder(node->left);
            preOrder(node->right);
        }
    }
    void inOrder(Node* node){
        if(node != NULL){
            inOrder(node->left);
            cout<<node->key<<endl;
            inOrder(node->right);
        }
    }
    void postOrder(Node* node){
        if(node != NULL){
            postOrder(node->left);
            postOrder(node->right);
            cout<<node->key<<endl;
        }
    }
    void destroy(Node* node){
        if(node != NULL){
            destroy(node->left);
            destroy(node->right);

            delete node;
            count -- ;
        }
    }
};

int main()
{
    return 0;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值